var a:array[1..3,1..200000]of longint;
b:array[1..2,1..200000]of longint;
n:byte;
s,i,j,v,s2,rs,rs2,z,x:longint;
bol:boolean;
procedure sort(i,j:longint);
var st,dr,t,m:longint;
begin
m:=b[1,(i+j)div 2]; st:=i; dr:=j;
repeat
while b[1,i]<m do inc(i);
while b[1,j]>m do dec(j);
if i<=j then begin t:=b[1,i]; b[1,i]:=b[1,j]; b[1,j]:=t; t:=b[2,i]; b[2,i]:=b[2,j]; b[2,j]:=t; inc(i); dec(j); end;
until i>j;
if st<j then sort(st,j);
if i<dr then sort(i,dr);
end;
function cautare(i,j,s:longint):longint;
var m:longint;
begin
m:=(i+j)div 2;
if (i=j) and (b[1,m]<>s) then cautare:=0 else
if b[1,m]=s then cautare:=b[2,m]
else
if b[1,m]>s then cautare:=cautare(i,m,s)
else cautare:=cautare(m+1,j,s);
end;
begin
assign(input,'loto.in'); reset(input);
readln(n,s);
for i:=1 to n do read(a[3,i]);
v:=1; x:=1;
for i:=1 to n do begin
inc(x,(i-1)*n);
for j:=i to n do begin
inc(x,j-1);
for z:=j to n do begin a[1,v]:=a[3,i]+a[3,j]+a[3,z]; b[1,v]:=a[1,v]; b[2,v]:=x; inc(x); inc(v); end;
end;
end;
z:=v-1;
sort(1,z);
i:=1;
while (bol=false) and (i<=z) do
begin
s2:=s-b[1,i];
rs:=cautare(1,z,s2);
if rs<>0 then begin bol:=true; rs2:=b[2,i]; end;
inc(i);
end;
assign(output,'loto.out'); rewrite(output);
if bol then
begin
i:=1; v:=0;
while i<>4 do begin if rs mod n=0 then write(a[3,n],' ') else write(a[3,rs mod n],' '); if rs mod n <>0 then inc(v); rs:=rs div n+v; v:=0; inc(i) end;
i:=1; v:=0;
while i<>4 do begin if rs2 mod n=0 then write(a[3,n],' ') else write(a[3,rs2 mod n],' '); if rs2 mod n <>0 then inc(v); rs2:=rs2 div n+v; v:=0; inc(i); end;
end else writeln('-1');
close(output);
end.