Cod sursa(job #713649)
type vec=record
g:longint;
c:longint;
end;
var sum:array[1..5000]of longint;
v:array[1..5000]of vec;
use:array[1..5000,1..10000]of boolean;
n,g,i,max,j:longint;
procedure solve;
var i,j:longint;
begin
for i:=1 to n do
for j:=max downto 1 do
if (sum[j]<>0)and(v[i].c+sum[j]>sum[v[i].g+j])and(not use[v[i].g,j]) then
begin
use[i,j]:=true;
sum[v[i].g+j]:=v[i].c+sum[j];
if v[i].g+j>max then max:=v[i].g+j;
if max>g then max:=g;
end;
end;
begin
assign(input,'rucsac.in');reset(input);
assign(output,'rucsac.out');rewrite(output);
read(n,g);
max:=0;
for i:=1 to n do
begin
read(v[i].g,v[i].c);
sum[v[i].g]:=v[i].c;
use[v[i].g,v[i].g]:=true;
if v[i].g>max then max:=v[i].g;
end;
solve;
writeln(sum[g]);
close(output);
end.