// #include #include using namespace std; using ll = long long; constexpr ll inf = (1LL << 61); ll dx[4] = {0, 1, 0, -1}; ll dy[4] = {-1, 0, 1, 0}; #define rep(i, n) for (ll i = 0; i < (ll)(n); ++i) #define REP(i, init, n) for (ll i = (ll)init; i < (ll)(n); ++i) // ll op(ll a, ll b) { return max(a, b); } // ll e() { return -inf; } ll a[510], c[510]; ll dp[2][510][510]; int main() { ll n, d, K; cin >> n >> d >> K; rep(i, n) cin >> a[i]; rep(i, n) cin >> c[i]; ll cur = 0; rep(i, 2) rep(j, 510) rep(k, 510) dp[i][j][k] = -inf; dp[1][0][0] = 0; rep(i, n) { rep(j, d + 1) { rep(k, K + 1) { dp[cur][j][k] = dp[1 - cur][j][k]; if (j >= 1 && k >= c[i] && dp[1 - cur][j - 1][k - c[i]] != -inf) dp[cur][j][k] = max(dp[cur][j][k], dp[1 - cur][j - 1][k - c[i]] + a[i]); } } cur = 1 - cur; } auto ans = dp[1 - cur][d][K]; if (ans == -inf) cout << "No" << endl; else cout << dp[1 - cur][d][K] << endl; }