#include using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) typedef long long ll; const long long INF = 1e18; void chmax(ll *a,ll b){ if (*a>N>>K; // first:=cost second:=value vector> d(N); rep(i,N) cin>>d[i].first>>d[i].second; sort(d.begin(),d.end()); reverse(d.begin(),d.end()); vector>> dp(2,vector>(N+1,vector(K+1,0))); rep(i,N)rep(j,K+1){ chmax(&dp[0][i+1][j],dp[0][i][j]); if (j+d[i].first<=K) chmax(&dp[1][i+1][j+d[i].first],dp[0][i][j]+d[i].second); if (dp[1][i][j]!=0){ chmax(&dp[1][i+1][j],dp[1][i][j]); chmax(&dp[0][i+1][j],dp[1][i][j]+d[i].second); } } ll res=0; rep(i,K+1){ chmax(&res,dp[0][N][i]); chmax(&res,dp[1][N][i]); } cout<