//我就记得知识改一个for循环的条件
//所以完全背包的区别就在于同物品可以无限制的加
//第二遍会做
#include <iostream>
using namespace std;
const int N = 1010;
int f[N], v[N], w[N];
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <=n; i ++) scanf("%d%d", &v[i], &w[i]);
for(int i = 1;i <= n; i ++)
for(int j = v[i]; j <=m; j ++)
f[j] = max(f[j], f[j - v[i]] + w[i]);
printf("%d", f[m]);
return 0;
}