#include<iostream>
using namespace std;
struct str{int w, v;};
int n, m;
str t[5001];
long long dp[20001];
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++) cin >> t[i].w >> t[i].v;
for(int i = 1;i <= n;i++){
for(int j = m;j >= t[i].w;j--){
dp[j] = max(dp[j], dp[j-t[i].w]+t[i].v);
}
}
cout << dp[m] << endl;
return 0;
}