#include<cstdio>
#include<algorithm>
using namespace std;
const int Dmax = 1000000,MaxE = 100;
struct element{
int sum,p1,p2,p3;
}v[Dmax + 1];
int a[MaxE+1];
inline bool cmp(element a, element b){
return a.sum<b.sum;
}
int caut_bin (int x, int nr){
int rez=0,pas=1<<19;
while(pas){
if(rez+pas <= nr && v[rez+pas].sum < x)
rez+=pas;
pas>>=1;
}
return rez;
}
int main (){
FILE *in = fopen ("loto.in","r");
FILE *out = fopen ("loto.out","w");
int i,x,y,z,n,nr=0,S;
fscanf(in,"%d%d",&n,&S);
for (i = 1 ; i <= n ; ++i) fscanf(in,"%d",&a[i]);
for(x = 1 ; x <= n ; ++x)
for(y = x ; y <= n ; ++y)
for(z = y ; z <= n ; ++z){
if(a[x]+a[y]+a[z]<S){
v[++nr].sum=a[x]+a[y]+a[z];
v[nr].p1=x;
v[nr].p2=y;
v[nr].p3=z;
}
}
sort(v+1,v+nr+1,cmp);
bool ok = true;
//int dr,st,mid,sp;
int dr;
for(i = 1; i <= nr && ok ; ++i){
dr=caut_bin(S-v[i].sum,nr);
if(v[i].sum+v[dr+1].sum==S){
ok=false;
fprintf(out,"%d %d %d %d %d %d\n",a[v[i].p1],a[v[i].p2],a[v[i].p3],a[v[dr+1].p1],a[v[dr+1].p2],a[v[dr+1].p3]);
}
/*sp=S-v[i].sum;
st=1;
dr=nr;
while(st<=dr){
mid=(st+dr)/2;
if(sp>v[mid].sum)
st=mid+1;
else if(sp<v[mid].sum)
dr=mid-1;
else{
fprintf(out,"%d %d %d %d %d %d\n",a[v[i].p1],a[v[i].p2],a[v[i].p3],a[v[mid].p1],a[v[mid].p2],a[v[mid].p3]);
ok=false;
}
}*/
}
if(ok==true)
fprintf(out,"-1\n");
fclose(in);
fclose(out);
return 0;
}