import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        while(in.hasNext()){
            solution(in);
        }
    }

    /**
     * 模拟法: k路归并
     * @param in
     */
    private static void solution(Scanner in){
        int k = in.nextInt();

        int[][] factors = new int[k][8];
        for(int i=0; i<k; i++){
            for(int j=7; j>=0; j--){
                factors[i][j] = in.nextInt();
            }
        }
        int n = in.nextInt();

        PriorityQueue<Node> minHeap = new PriorityQueue<>(k, Comparator.comparingLong(o -> o.val));

        // k路归并
        Node node;
        for(int i=0; i<k; i++){
            node = new Node(i,1,compute(factors[i], 1));
            minHeap.offer(node);
        }

        int count = 1;
        while(count < n){
            Node top = minHeap.poll();
            minHeap.offer(new Node(top.k, top.n+1, compute(factors[top.k], top.n+1)));
            count++;
        }

        System.out.println(minHeap.peek().val);
    }

    /**
     * 计算f(n)
     * @param factor
     * @param n
     * @return
     */
    private static long compute(int[] factor, int n){
        long value = 0L;
        for(int i=7; i>=0; i--){
            value += (int) (factor[i]*Math.pow(n,i));
        }

        return value;
    }

    private static class Node{
        // 系数factors[k]
        private int k;
        // 整数n
        private int n;
        // f(n)
        private long val;

        public Node(int k, int n, long val){
            this.k = k;
            this.n = n;
            this.val = val;
        }
    }
}