#include <cstdio>
#include <algorithm>
#define MAXN 5000
#define MAXG 10000
FILE *fin=fopen("rucsac.in","r");
FILE *fout=fopen("rucsac.out","w");
int g[MAXN+2], p[MAXN+2];
int d[2][MAXG];
int main() {
int n, gr, rez, l = 0;
scanf("%d%d", &n, &gr);
for (int i = 1; i <= n; i++)
scanf("%d%d", &g[i], &p[i]);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= gr; j++)
{
d[1-l][j] = d[l][j];
if (g[i] <= j)
d[1-l][j] = std::max( d[1-l][j], d[l][j - g[i]] + p[i] );
}
l = 1 - l;
}
rez = d[l][gr];
printf("%d", rez);
return 0;
}