include[HTML_REMOVED]
using namespace std;
const int N = 10005;
int n, m;
int v[N],w[N];
int f[N];
int main()
{
cin>>n>>m;
for(int i = 1; i<=n; i)
{
cin>>v[i]>>w[i];
}
for(int i = 1;i<=n;i)
{
//for(int j = 0; j<=m; j++)
for(int j = m; j >= v[i]; j–)
{
//f[i][j] = f[i-1][j];
//-> f[j] = f[j];
//含义更改为前n个元素 背包容量为j时的 最大拾取物品数
if(j >= v[i])
{
//f[i][j] = max(f[i-1][j], f[i-1][j-v[i]] + w[i]);
//如果j从大到小计算 则f[j-v[i]]为空白 空白说明读取的是i-1行计算的数据 符合!
f[j] = max(f[j],f[j-v[i]] + w[i]);
}
}
}
cout<<f[m]<<endl;
return 0;
}