#include <stdio.h>
#include <algorithm>
using namespace std;
struct merg
{
int s,a,b,c;
};
bool cmp(merg x1,merg x2)
{
if(x1.s>x2.s)
return false;
return true;
}
int v[101];
merg sol[1000001];
int main()
{
FILE *fin,*fout;
int n,m,i,nr,k,x,y,elem,st,dr,mij,ok;
fin=fopen("loto.in","r");
fout=fopen("loto.out","w");
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&nr);
v[i]=nr;
}
k=1;
for(i=1;i<=n;i++)
for(x=1;x<=n;x++)
for(y=1;y<=n;y++)
{
sol[k].s=v[i]+v[y]+v[x];
sol[k].a=v[i];
sol[k].b=v[y];
sol[k].c=v[x];
k++;
}
n=n*n*n;
sort(sol+1,sol+n+1,cmp);
i=1;
elem=0;
ok=0;
while(i<=n&&ok==0)
{
st=1;
dr=n;
elem=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(sol[mij].s+sol[i].s<=m)
{
if(sol[mij].s+sol[i].s==m)
ok=1;
elem=mij;
st=mij+1;
}
else
dr=mij-1;
}
i++;
}
if(ok==1)
{
i--;
fprintf(fout,"%d %d %d %d %d %d\n",sol[i].a,sol[i].b,sol[i].c,sol[elem].a,sol[elem].b,sol[elem].c);
}
else
fprintf(fout,"-1");
fclose(fin);
fclose(fout);
}