#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int N,M; pair VW[5000]; long long dp[2][5001]; void solve() { cin >> N >> M; for(int i = 0;i < N;i++) cin >> VW[i].first >> VW[i].second; sort(VW,VW+N,greater>()); int cur = 0; long long ans = -1; for(int i = 0;i < N;i++) { int nxt = 1-cur; for(int j = 0;j <= M;j++) dp[nxt][j] = -1; auto [v,w] = VW[i]; for(int j = 0;j <= M;j++) { dp[nxt][j] = max(dp[nxt][j],dp[cur][j]); if(j+w <= M) dp[nxt][j+w] = max(dp[nxt][j+w],dp[cur][j]+v); } swap(cur,nxt); ans = max(ans,dp[cur][M]*v); } cout << ans << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int tt = 1; //cin >> tt; while(tt--) solve(); }