#include<stdio.h>
#define NMAX 101
#define MMAX 1000001
long long s,in,sf,y[MMAX],x[NMAX],i,j,n,m,k,l,w;
struct kkt
{
long long a,b,c;
};
kkt q[MMAX],Q[MMAX];
int N, B[MMAX];
void merge_sort(int l, int r)
{
int m = (l + r) >> 1, i, j, k;
if (l == r) return;
merge_sort(l, m);
merge_sort(m + 1, r);
for (i=l, j=m+1, k=l; i<=m || j<=r; )
if (j > r || (i <= m && y[i] < y[j]))
{
B[k++] = y[i++];
Q[k-1].a=q[i-1].a;
Q[k-1].b=q[i-1].b;
Q[k-1].c=q[i-1].c;
}
else
{
B[k++] = y[j++];
Q[k-1].a=q[j-1].a;
Q[k-1].b=q[j-1].b;
Q[k-1].c=q[j-1].c;
}
for (k = l; k <= r; k++)
{
y[k] = B[k];
q[k].a=Q[k].a;
q[k].b=Q[k].b;
q[k].c=Q[k].c;
}
}
int main()
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%lld%lld",&n,&k);
for (i=1;i<=n;i++)
scanf("%lld",&x[i]);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
for (l=1;l<=n;l++)
{
y[++y[0]]=x[i]+x[j]+x[l];
q[y[0]].a=x[i];
q[y[0]].b=x[j];
q[y[0]].c=x[l];
}
merge_sort(1,y[0]);
for (i=1;i<=y[0];i++)
{
s=k-y[i];
in=1;
sf=y[0];
while (in<=sf)
{
l=(in+sf)/2;
if (y[l]==s) {printf("%lld %lld %lld %lld %lld %lld\n",q[i].a,q[i].b,q[i].c,q[l].a,q[l].b,q[l].c); return 0;}
// if (y[sf]==s) {l=sf;printf("%lld %lld %lld %lld %lld %lld\n",q[i].a,q[i].b,q[i].c,q[l].a,q[l].b,q[l].c); return 0;}
// if (y[in]==s) {l=in;printf("%lld %lld %lld %lld %lld %lld\n",q[i].a,q[i].b,q[i].c,q[l].a,q[l].b,q[l].c); return 0;}
if (y[l]<s) in=l+1;
else
sf=l-1;
}
}
printf("-1\n");
return 0;
}