33 lines
650 B
ObjectPascal

var
a:Array[0..1000]of longint;
b:array[1..1000]of boolean;
n,i,j,c,max:longint;
procedure search(s,t:longint);
var i,j:longint;
begin
if s>c then exit;
if s>max then max:=s;
for i:=1 to n do
begin
if b[i] then
begin
b[i]:=false;
s:=s+a[i];
if s=c then begin writeln(c);halt;end
else search(s,t+1);
b[i]:=true;
s:=s-a[i];
end;
end;
end;
begin
assign(input,'load.in');reset(input);
assign(output,'load.out');rewrite(output);
readln(n,c);
for i:=1 to n do
begin read(a[i]);b[i]:=true;end;
search(0,1);
writeln(max);
close(input);close(output);
end.