#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1010;
int f[N][N] , v[N] , w[N];
int n , m;
int main()
{
scanf("%d%d" , &n , &m );
for(int i = 1 ; i <= n ; i ++ ) //读入每个物品的价值和重量
scanf("%d%d" , &v[i] , &w[i] );
//本来要将f[0][0]初始化成0的,但由于是在main函数外面定义,所以直接省略
//利用dp进行解答
for( int i = 1 ; i <= n ; i++ )
{
for( int j = 1 ; j <= m; j++ )
{
f[i][j] = f[i - 1][j];//这是考虑了没加第i个物品的情况
if(j >= v[i] )//这是考虑了第i个物品的情况
f[i][j] = max( f[i][j] , f[i - 1][j - v[i] ] + w[i] );
}
}
int res = 0;
for(int i = 1 ; i <= m ; i++ ) res = max( res , f[n][i] );
cout<< res << endl;
}