#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { int N, M, W; cin >> N >> M >> W; int A[N]; int B[N]; int C[M]; int D[M]; for (int i = 0; i < N; ++i) { cin >> A[i]; } for (int i = 0; i < N; ++i) { cin >> B[i]; } for (int i = 0; i < M; ++i) { cin >> C[i]; } for (int i = 0; i < M; ++i) { cin >> D[i]; } int dp[W + 1][1 << M]; memset(dp, -1, sizeof(dp)); int ans = 0; dp[0][0] = 0; for (int i = 0; i < N; ++i) { int a = A[i]; int b = B[i]; for (int w = W - a; w >= 0; --w) { int nw = w + a; for (int mask = 0; mask < (1 << M); ++mask) { if (dp[w][mask] < 0) continue; dp[nw][mask] = max(dp[nw][mask], dp[w][mask] + b); ans = max(ans, dp[nw][mask]); } } for (int w = W; w >= 0; --w) { for (int mask = 0; mask < (1 << M); ++mask) { if (dp[w][mask] < 0) continue; for (int j = 0; j < M; ++j) { if (mask >> j & 1) continue; int nw = w - C[j]; int nmask = mask | (1 << j); if (nw < 0) continue; dp[nw][nmask] = max(dp[nw][nmask], dp[w][mask] - D[j]); } } } } cout << ans << endl; return 0; }