#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const int M=1e7+10; int n,m; pair a[10005]; LL dp[2][M]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i].first>>a[i].second; } sort(a+1,a+1+n); reverse(a+1,a+1+n); for(int i=0;i=c) dp[(i+1)&1][(j-c)/2] = max(dp[(i+1)&1][(j-c)/2],dp[i&1][j]+d); } } LL ans=0; for(int j=0;j<=m;j++){ ans=max(ans,dp[n&1][j]); } cout<