#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int dp[maxn];
int w[maxn],v[maxn];
int main(){
int N,V;
cin>>N>>V;
for(int i=0;i<N;i++)
cin>>v[i]>>w[i];//输入体积 价值
for(int i=0;i<N;i++)
for(int j=V;j>=v[i];j--)
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
cout<<dp[V]<<endl;//求证为什么dp[V]就为答案,而非需要经过遍历求max{dp[0~V]}?
}