N,M,K=map(int,input().split()) A=list(map(int,input().split())) A.append(0) N+=1 P=(K+1)>>1 Q=K>>1 X=[] Y=[] def p(x,i): if i==P: if x<=M: X.append(x) else: for j in range(N): p(x+A[j],i+1) def q(x,i): if i==Q: if x<=M: Y.append(x) else: for j in range(N): q(x+A[j],i+1) p(0,0) q(0,0) X.sort() Y.sort() Y.append(M+3) from bisect import * ANS=0 for i in range(len(X)): v=bisect_right(Y,M-X[i]) ANS=max(ANS,Y[v-1]+X[i]) print(ANS)