#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 3402+20;
const int maxm = 12880+20;
int W[maxn]; // weight
int D[maxn]; // desirability
int f[2][maxm];
int main() {
int N, M;
while( cin >> N >> M ) {
memset( f, 0, sizeof(f) );
for(int i=1; i<=N; ++i) {
cin >> W[i] >> D[i];
}
for(int i=1; i<=N; ++i) {
for(int j=1; j<=M; j++) {
f[i%2][j] = f[(i-1)%2][j];
if( j-W[i]>=0 ) {
f[i%2][j] = max( f[i%2][j], f[(i-1)%2][j-W[i]] + D[i] );
}
}
}
cout << f[N%2][M] << endl;
}
return 0;
}