#include #include #include template bool chmax(T &a, const T &x) { return (x > a ? a = x, true : false); } int main() { constexpr long long inf = 1e18; long long N, M, K; std::cin >> N >> M >> K; auto A = std::vector(N, 0LL); for (int i = 0; i < N; ++i) std::cin >> A[i]; A.push_back(0); auto pick1 = std::set(A.begin(), A.end()); std::set pick2, pick3; for (const auto x : pick1) for (const auto a : A) pick2.insert(x + a); for (const auto x : pick2) for (const auto a : A) pick3.insert(x + a); pick1.insert(inf); pick2.insert(inf); pick3.insert(inf); auto f = [&](int k) { switch (k) { case 1: return &pick1; case 2: return &pick2; case 3: return &pick3; default: std::terminate(); } }; auto answer = 0LL; if (K <= 3) answer = *prev(f(K)->upper_bound(M)); else for (auto i = pick3.begin(); i != pick3.upper_bound(M); ++i) chmax(answer, *i + *prev(f(K - 3)->upper_bound(M - *i))); std::cout << answer << "\n"; }