#include <bits/stdc++.h>
using namespace std;
ifstream in ("rucsac.in");
ofstream out ("rucsac.out");
const int Nmax = 5e3 + 5;
int D[Nmax][Nmax];
int main()
{
int n, Gmax,x,value;
in >> n >> Gmax;
for(int i = 1; i <= n; i++){
in >> x >> value;
for(int j = 1; j <=Gmax; j++){
if(j >= x){
D[i][j] = max(D[i-1][j], D[i - 1][j - x] + value);// greutate randul anterior (valoarea maxima pentru acea greutate deja calculata SAU
//valoarea greutatii - gretatea obiectului nostru + valoare ob nostru
}
else{
D[i][j] = D[i - 1][j];
}
}
}
out<<D[n][Gmax];
return 0;
}