from bisect import bisect def main(): N, M, K = map(int, input().split()) *A, = map(int, input().split()) A.sort() if A[0] > 0: A = [0]+A N += 1 S = set() if K > 3: for i in range(N): for j in range(i, N): for k in range(j, N): S.add(A[i]+A[j]+A[k]) L = sorted(list(S)) if K == 6: X = L.copy() elif K == 5: T = set() for i in range(N): for j in range(i, N): T.add(A[i]+A[j]) X = sorted(list(T)) elif K == 4: X = A.copy() else: p = bisect(L, M) print(L[p-1]) return else: if K == 1: p = bisect(A, M) print(A[p-1]) return else: for i in range(N): for j in range(i, N): S.add(A[i]+A[j]) L = sorted(list(S)) p = bisect(L, M) print(L[p-1]) return ans = 0 for l in L: if l > M: break p = bisect(X, M-l) ans = max(ans, l+X[p-1]) print(ans) if __name__ == "__main__": main()