#include
using namespace std;
long long n;
long long w;
vector>v;
long long dp[100005][105];
long long f(long long k, long long idx)
{
if(k==0)
{
return 0;
}
if(idx==n)
{
return 1e16;
}
if(dp[k][idx]!=-1)
{
return dp[k][idx];
}
long long rez=1e16;
if(k >= v[idx].second)
rez=min(rez, f(k-v[idx].second,idx+1)+v[idx].first);///w
rez=min(rez, f(k,idx+1));
return dp[k][idx]=rez;
}
int main()
{
cin>>n>>w;
long long x,y;
memset(dp,-1,sizeof dp);
for(long long i=0;i>x>>y;
v.push_back({x,y});
}
for(long long i=100000;i>=0;i--)
{
if(f(i,0)<=w)
{
cout<