# N, M が小さいことに注目して bit DP を行う # bit DP でもつべき状態は [今の使ったものの集合][現在の重さ] の価値の最大値 # O(2^(N+M) W (N+M)) 間に合うかやや微妙 n, m, w = map(int,input().split()) a = list(map(int,input().split())) b = list(map(int,input().split())) c = list(map(int,input().split())) d = list(map(int,input().split())) z = n + m dp = [[- 10 ** 18] * (w+1) for i in range(1 << z)] dp[0][0] = 0 for i in range(1 << z): for noww in range(w + 1): for j in range(z): if i >> j & 1: if j < n: # buy if noww - a[j] < 0: continue dp[i][noww] = max(dp[i][noww], dp[i^(1< w: continue dp[i][noww] = max(dp[i][noww], dp[i^(1<