#include
using namespace std;
int NrSwipe, n;
struct pereche{
int p, sw;
}f5001;
int Rucsac(int Sw, int n){
int dp[Sw + 1];
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= n; i++)
for(int j = Sw; j >= 0; j—)
if(f[i].sw <= j)
dp[j] = max(dp[j], dp[j – f[i].sw] + f[i].p);
return dp[Sw];
}
int main(){
cin >> n >> NrSwipe;
for(int i = 1; i <= n; i++)
cin >> f[i].p >> f[i].sw;
cout << Rucsac(NrSwipe, n);
return 0;
}