program menu;
Uses math;
const
MAX=5005;
var
N,B,i,j : integer;
Prezzo:array[1..MAX] of integer;
tab:array[0..MAX,0..MAX] of integer;
preso:array[1..MAX] of boolean;
uscita:boolean;
begin
readln(N,B);
for i:=1 to N do readln(Prezzo[i]);
for i:=0 to B do tab[0,i]:=0;
for i:=0 to N do tab[i,0]:=0;
for i:=1 to N do
for j:=1 to B do
begin
if j>Prezzo[i] then tab[i,j]:=tab[i-1,j]
else
begin
if tab[i-1,j] >tab[i-1,j-Prezzo[i]] then tab[i,j]:=tab[i-1,j]
else tab[i,j]:=tab[i-1,j-Prezzo[i]];
end;
end;
i:=N; j:=B;
while (i>0) and (j>0) do
begin
if tab[i,j]<>tab[i-1,j] then begin i:=i-1; j:=j-Prezzo[i]; writeln(Prezzo[i]);end
else i:=i-1;
end;
for i:=1 to N do
begin
for
j:=0 to B do write(tab[i,j],' ');
writeln;
end;
end.
cHJvZ3JhbSBtZW51OwpVc2VzIG1hdGg7CmNvbnN0CiAgICAgTUFYPTUwMDU7CnZhcgogICAgTixCLGksaiA6IGludGVnZXI7CiAgICBQcmV6em86YXJyYXlbMS4uTUFYXSBvZiBpbnRlZ2VyOwogICAgdGFiOmFycmF5WzAuLk1BWCwwLi5NQVhdIG9mIGludGVnZXI7CiAgICBwcmVzbzphcnJheVsxLi5NQVhdIG9mIGJvb2xlYW47CiAgICB1c2NpdGE6Ym9vbGVhbjsKYmVnaW4KCXJlYWRsbihOLEIpOwoJZm9yIGk6PTEgdG8gTiBkbyByZWFkbG4oUHJlenpvW2ldKTsKCWZvciBpOj0wIHRvIEIgZG8gdGFiWzAsaV06PTA7Cglmb3IgaTo9MCB0byBOIGRvIHRhYltpLDBdOj0wOwoJZm9yIGk6PTEgdG8gTiBkbwoJICAgICAgICAgICAgICBmb3Igajo9MSB0byBCIGRvIAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaj5QcmV6em9baV0gdGhlbiB0YWJbaSxqXTo9dGFiW2ktMSxqXQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhYltpLTEsal0gPnRhYltpLTEsai1QcmV6em9baV1dIHRoZW4gdGFiW2ksal06PXRhYltpLTEsal0gCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRhYltpLGpdOj10YWJbaS0xLGotUHJlenpvW2ldXTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgaTo9Tjsgajo9QjsKICAgIHdoaWxlIChpPjApIGFuZCAoaj4wKSBkbyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YWJbaSxqXTw+dGFiW2ktMSxqXSB0aGVuIGJlZ2luIGk6PWktMTsgajo9ai1QcmV6em9baV07IHdyaXRlbG4oUHJlenpvW2ldKTtlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGk6PWktMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgIGZvciBpOj0xIHRvIE4gZG8KICAgICAgICAgYmVnaW4KICAgICAgICAgICBmb3IKICAgICAgICAgICAgICBqOj0wIHRvIEIgZG8gd3JpdGUodGFiW2ksal0sJyAnKTsKICAgICAgICAgICB3cml0ZWxuOwogICAgICAgICBlbmQ7CiBlbmQuCg==