#include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning(disable:4996) typedef long long ll; #define MIN(a, b) ((a)>(b)? (b): (a)) #define MAX(a, b) ((a)<(b)? (b): (a)) #define LINF 9223300000000000000 #define INF 2140000000 const long long MOD = 1000000007; //const long long MOD = 998244353; using namespace std; int dp[5005][5005][2]; int main(int argc, char* argv[]) { int n,K; scanf("%d%d", &n, &K); vector > z(n); int i,j,k; for(i=0; i=0) { int j2=(k==0? j-z[i].first: j); if(j2>=0 && j2<=K) { dp[i+1][j2][1-k]=MAX(dp[i+1][j2][1-k],dp[i][j][k]+z[i].second); } } } } } int ans=0; for(j=0; j<=K; j++) { for(k=0; k<2; k++) { ans=MAX(ans,dp[n][j][k]); } } printf("%d\n", ans); return 0; }