#include #include using namespace std; struct Ramen { int s, a; }; vector> dp(2006, vector(2006, -1)); int main() { int N, I; cin >> N >> I; Ramen r[N]; for(int i = 0; i < N; i++) { cin >> r[i].s >> r[i].a; } dp[0][0] = 0; for(int i = 0; i < N; i++) { for(int j = 0; j <= I; j++) { if(dp[i][j] == -1) continue; dp[i + 1][r[i].s + j] = max(dp[i + 1][r[i].s + j], dp[i][j] + r[i].a); dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]); } } int ans = 0; for(int i = 0; i <= I; i++) { ans = max(ans, dp[N][i]); } cout << ans << endl; }