67 lines
967 B
ObjectPascal

Program tsoi_standard;
{ tsoi2 Diablo }
Const
inf ='diablo.in';
ouf ='diablo.out';
LimitN =100;
LimitM =500;
LimitP =50;
Var
f,d :array[0..LimitN,0..LimitM]of longint;
c :array[1..LimitN]of longint;
w :array[1..LimitP]of longint;
i,j,k :longint;
p,t :longint;
n,m :longint;
procedure show(x,y:longint);
var
t :longint;
begin
if x>1 then
show(x-1,y-d[x][y]*c[x]);
writeln(d[x][y]);
end;
Begin
assign(input,inf);
reset(input);
read(n,m);
for i:=1 to n do
begin
read(c[i],p);
for j:=1 to p do
read(w[j]);
for j:=1 to m do
begin
t:=0;
f[i][j]:=f[i-1][j];
for k:=1 to p do
begin
inc(t,c[i]);
if t>j then break;
if f[i-1][j-t]+w[k]>f[i][j] then
begin
f[i][j]:=f[i-1][j-t]+w[k];
d[i][j]:=k;
end;
end;
end;
end;
close(input);
assign(output,ouf);
rewrite(output);
k:=-1;
for i:=0 to m do
if f[n][i]>k then
begin
k:=f[n][i];
j:=i;
end;
writeln(f[n][j]);
show(n,j);
close(output);
End.