#include #define st first #define nd second using namespace std; void debug_out() { cerr << endl; } template ostream& prnt(ostream& out, T v) { out << v.size() << '\n'; for(auto e : v) out << e << ' '; return out;} template ostream& operator<<(ostream& out, vector v) { return prnt(out, v); } template ostream& operator<<(ostream& out, set v) { return prnt(out, v); } template ostream& operator<<(ostream& out, map v) { return prnt(out, v); } template ostream& operator<<(ostream& out, pair p) { return out << '(' << p.st << ' ' << p.nd << ')'; } template void debug_out(Head H, Tail... T) { cerr << " " << H; debug_out(T...);} #define dbg(...) cerr << #__VA_ARGS__ << " ->", debug_out(__VA_ARGS__) #define dbg_v(x, n) do{cerr<<#x"[]: ";for(int _=0;_> n >> k; for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 1; i <= n; i++) cin >> b[i]; for(int i = 1; i <= k; i++) dp[0][i] = -1000000000; for(int i = 1; i <= n; i++) { for(int j = 0; j <= k; j++) dp[i][j] = -1000000000; for(int j = 0; j <= k; j++) { dp[i][min(j + a[i], k)] = max(dp[i][min(j + a[i], k)], dp[i - 1][j]); dp[i][j] = max(dp[i][j], dp[i - 1][j] + b[i]); } // dbg_v(dp[i], k + 1); } cout << max(dp[n][k], -1) << '\n'; }