#include <fstream>
using namespace std;
ifstream fi("rucsac.in");
ofstream fo("rucsac.out");
struct chef{
int g;
int v;
}Bontea[5005];
int n,i,j,k,g,a[10005],b[10005];
int main()
{
fi>>n>>g;
for(i=1;i<=n;i++){
fi>>Bontea[i].g>>Bontea[i].v;
}
for(i=1;i<=n;i++){
if(i%2==1){
for(j=1;j<=g;j++){
if(j<Bontea[i].g)
b[j]=max(b[j-1],a[j]);
else{
b[j]=max(max(b[j-1],a[j]),
Bontea[i].v+a[j-Bontea[i].g]);
}
}
}else{
for(j=1;j<=g;j++){
if(j<Bontea[i].g)
a[j]=max(a[j-1],b[j]);
else{
a[j]=max(max(a[j-1],b[j]),
Bontea[i].v+b[j-Bontea[i].g]);
}
}
}
}
/*
for(i=1;i<=n;i++){
for(j=1;j<=g;j++)
fo<<a[i][j]<<' ';
fo<<'\n';
}
*/
if(n%2==1)fo<<b[g];
else fo<<a[g];
return 0;
}