#include using namespace std; #include // 可変引数repマクロ https://trap.jp/post/1224/ #define rep1(a) for (long long i = 0; i < (long long)a; i++) #define rep2(i, a) for (long long i = 0; i < (long long)a; i++) #define rep3(i, a, b) for (long long i = (long long)a; i <= (long long)b; i++) #define rep4(i, a, b, c) for (long long i = (long long)a; i <= (long long)b; i += (long long)c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define printYesNo(is_ok) puts(is_ok ? "Possible" : "Impossible") #define ALL(v) v.begin(), v.end() #define RALL(v) v.rbegin(), v.rend() #define SORT(v) sort(ALL(v)) #define RSORT(v) sort(RALL(v)) #define REVERSE(v) reverse(ALL(v)) template using pq_asc = priority_queue, greater>; template using pq_des = priority_queue; template void printlnVector(T v) { for (auto n : v) { cout << n << endl; } } template void printVector(T v) { for (auto n : v) { cout << n << " "; } cout << endl; } int main() { long long N, D, K; cin >> N >> D >> K; vector A(N), C(N); rep(i, N) { cin >> A[i]; } rep(i, N) { cin >> C[i]; } vector> dp(D + 1, vector(K + 1, LONG_LONG_MIN)); dp[0][0] = 0; rep(i, N) { vector> next_dp = dp; rep(d, D + 1) rep(k, K + 1) { if (dp[d][k] == LONG_LONG_MIN) { continue; } next_dp[d][k] = max(next_dp[d][k], dp[d][k]); if (d < D) { long long next_d = d + 1; long long next_k = min(K, k + C[i]); next_dp[next_d][next_k] = max(next_dp[next_d][next_k], dp[d][k] + A[i]); } } swap(dp, next_dp); } long long ans = dp[D][K]; if (ans == LONG_LONG_MIN) { cout << "No" << endl; } else { cout << ans << endl; } return 0; }