#include <fstream>
#define DMAX 10005
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n, G;
int dp[5005][DMAX];
int pret[DMAX], greutate[DMAX];
void citire();
void dinamic();
int main()
{
citire();
dinamic();
fout << dp[n][G];
return 0;
}
void citire()
{
int i;
fin >> n >> G;
for(i = 1; i <= n; ++i)
{
fin >> greutate[i] >> pret[i];
}
}
void dinamic()
{
int i, j;
for(i = 0; i <= n; ++i)
dp[0][i] = 0;
for(i = 0; i <= G; ++i)
dp[i][0] = 0;
for(i = 1; i <= n; ++i)
{
for(j = 0; j <= G; ++j)
{
dp[i][j] = dp[i-1][j];
if(greutate[i] <= j && dp[i-1][j-greutate[i]] + pret[i] > dp[i][j])
dp[i][j] = dp[i-1][j-greutate[i]] + pret[i];
}
}
}