#include<bits/stdc++.h> using namespace std; long long findMaxEfficiency(int m, vector<int> values, vector<int> resources) { int n = values.size(); vector<int> order(n); iota(order.begin(),order.end(),0); sort(order.begin(),order.end(), [&](const int& l, const int& r){ return values[l] > values[r]; }); vector<vector<int>> dp0(n, vector<int> (m+1,0)), dp1(n, vector<int> (m+1,0)); dp1[0][resources[order[0]]] = values[order[0]]; for(int i=1; i<n; i++){ for(int j=1; j<=m; j++){ dp1[i][j] = dp1[i][j-1]; dp0[i][j] = max({dp0[i][j-1], dp0[i-1][j], dp1[i-1][j]}); if(resources[order[i]] <= j) dp1[i][j] = max(dp1[i][j-1], values[order[i]] + max(dp0[i-1][j-resources[order[i]]], dp1[i-1][j-resources[order[i]]])); } } long long ans = 0; for(int i=0; i<n; i++) ans = max(ans, 1LL*values[order[i]]*dp1[i][m]); return ans; } int main(){ int n,m; cin>>n>>m; vector<int> values(n), resources(n); for(int i=0; i<n; i++) cin>>values[i]>>resources[i]; cout<<findMaxEfficiency(m,values,resources)<<"\n"; }