#include <fstream>
#include <algorithm>
#define NMAX 5000
using namespace std;
int n,gMax;
struct obiect{
int greu;
int cost;
double raport;
}v[NMAX+3];
ifstream fin ("rucsac.in");
ofstream fout ("rucsac.out");
int cmp(obiect a,obiect b)
{
if(a.raport>b.raport)
{
return 1;
}
else if(a.raport==b.raport && a.greu>b.greu)
{
return 1;
}
return 0;
}
int main()
{
fin>>n>>gMax;
for(int i=1; i<=n; i++)
{
fin>>v[i].greu>>v[i].cost;
v[i].raport=(double)v[i].cost/(double)v[i].greu;
//fout<<v[i].raport<<" ";
}
stable_sort(v+1,v+n+1,cmp);
int cMax=0,g=0;
for(int i=1; i<=n; i++)
{
if(g+v[i].greu<=gMax)
{
g+=v[i].greu;
cMax+=v[i].cost;
}
//fout<<v[i].greu<<" "<<v[i].cost<<" "<<v[i].raport<<"\n";
}
fout<<cMax;
return 0;
}