program rucsac;
type vector=array[1..5000,1..2] of word;
var x:vector;
i,n,g:word;
pr,gr:longint;
fin,fout:text;
procedure sort(var v:vector);
var i,aux:word; cond:boolean; m1,m2:real;
begin
repeat cond:=true;
for i:=1 to n-1 do
begin m1:=(v[i,2]/v[i,1])*1000+abs(v[i,1]-v[i,2]);
m2:=(v[i+1,2]/v[i+1,1])*1000+abs(v[i+1,1]-v[i+1,2]);
if (m1<m2)
then begin aux:=v[i,1]; v[i,1]:=v[i+1,1]; v[i+1,1]:=aux;
aux:=v[i,2]; v[i,2]:=v[i+1,2]; v[i+1,2]:=aux;
cond:=false;
end
end;
{else if (v[i,2]=v[i+1,2]) and (v[i,1]>v[i+1,1])
then begin aux:=v[i,1]; v[i,1]:=v[i+1,1]; v[i+1,1]:=aux; end;}
until (cond);
end;
begin
assign(fin,'rucsac.in'); reset(fin);
assign(fout,'rucsac.out');rewrite(fout);
readln(fin,n,g);
for i:=1 to n do readln(fin,x[i,1],x[i,2]);
sort(x); i:=1; pr:=0; gr:=0;
while (i<=n) and (gr<=g) do
begin gr:=gr+x[i,1];
pr:=pr+x[i,2];
i:=i+1;
end;
i:=i-1; pr:=pr-x[i,2];
writeln (fout,pr);
close(fin);close(fout);
end.