#include<bits/stdc++.h>
using namespace std;
const int N = 1030;
int main()
{
int f[N][N]={0},v[N]={0},w[N]={0},n,m;//v[i]:第i个物品的体积,w[i]:第i个物品的价值
//f[i][j]:当选择i个物品时背包已用j个空间时的最大价值,n:有n个物品,m: 背包容量为m
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)//遍历1~n个物品
{
for(int j=0;j<=m;j++)//遍历背包的不同容量(0~m)
{
f[i][j]=f[i-1][j];//在不装物品i时的最大价值
if(j>=v[i])
{// 装 不装
f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);//装与不装取大
}
}
}
int an=-100;
for(int i=0;i<=m;i++) an=max(an,f[n][i]);//n个物品选择后找出最大值
cout<<an;
return 0;
}