#include #include #include using namespace std; using ll = long long; constexpr ll llINF = 1'000'000'000'000'000'000LL; int main () { int N, M; ll W; cin >> N >> M >> W; vector A(N), B(M), C(M); for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i < M; i++) cin >> B[i]; for (int i = 0; i < M; i++) cin >> C[i]; // タイプYは全列挙が通る -> 残りのタイプX枠は貪欲でよい。 vector cum(N + 1); sort(A.rbegin(), A.rend()); for (int i = 0; i < N; i++) cum[i + 1] = cum[i] + A[i]; ll ans = -llINF; for (int bit = 0; bit < (1 << M); bit++) { ll candi = 0; ll w_sum = 0; for (int i = 0; i < M; i++) if (0 < (bit & (1 << i))) { w_sum += B[i]; candi += C[i]; } if (W < w_sum) continue; ans = max(ans, candi + cum[min(W - w_sum, (ll) N)]); } cout << ans << "\n"; }