import java.util.*;

public class Money
{
    static HashMap<String, Currency> currencies;
    static Currency targetCurrency;
    static long targetAmount;
    static Answer best;

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int c = 1;

        while(true)
        {
            int n = scan.nextInt();
            if(n == 0) return;
            currencies = new HashMap<String, Currency>();

            for(long i = 0; i < n; i++)
            {
                long leftCount = scan.nextLong();
                Currency leftCurrency = getCurrency(scan.next());
                scan.next();
                long rightCount = scan.nextLong();
                Currency rightCurrency = getCurrency(scan.next());

                leftCurrency.exchangeRates.add(new ExchangeRate(rightCurrency, rightCount, leftCount));
                rightCurrency.exchangeRates.add(new ExchangeRate(leftCurrency, leftCount, rightCount));
            }

            targetAmount = scan.nextLong();
            targetCurrency = getCurrency(scan.next());

            best = new Answer(null, 0, Double.MAX_VALUE);
            traverse(targetCurrency, 1, 1);

            System.out.println("Case " + (c++) + ": " + best.count + " " + best.currency.name);
        }
    }

    public static void traverse(Currency currentCurrency, long accumNum, long accumDenom)
    {
        currentCurrency.visited = true;
        if(targetCurrency != currentCurrency)
        {
            long required = (long) Math.ceil(targetAmount * accumNum / (double)accumDenom);
            if(required <= 100000)
            {
                double valueInTargetCurrency = required * accumDenom / (double) accumNum;
                if(valueInTargetCurrency < best.valueInTargetCurrency)
                    best = new Answer(currentCurrency, required, valueInTargetCurrency);
            }
        }
        for(ExchangeRate exchange : currentCurrency.exchangeRates)
            if(!exchange.targetCurrency.visited)
                traverse(exchange.targetCurrency, accumNum * exchange.rateNumerator, accumDenom * exchange.rateDenominator);
    }

    public static Currency getCurrency(String name)
    {
        if(!currencies.containsKey(name))
            currencies.put(name, new Currency(name));

        return currencies.get(name);
    }

    static class Answer
    {
        public Answer(Currency currency, long count, double valueInTargetCurrency)
        {
            this.count = count;
            this.currency = currency;
            this.valueInTargetCurrency = valueInTargetCurrency;
        }

        public long count;
        public Currency currency;
        public double valueInTargetCurrency;
    }

    static class Currency
    {
        public Currency(String name)
        {
            this.name = name;
            exchangeRates = new ArrayList<ExchangeRate>();
        }

        public String name;
        public List<ExchangeRate> exchangeRates;
        public boolean visited = false;
    }

    static class ExchangeRate
    {
        public ExchangeRate(Currency targetCurrency, long rateNumerator, long rateDenominator)
        {
            this.targetCurrency = targetCurrency;
            this.rateNumerator = rateNumerator;
            this.rateDenominator = rateDenominator;
        }
        
        public Currency targetCurrency;
        public long rateNumerator;
        public long rateDenominator;
    }
}
