// O(n*n*n)
#include <algorithm>
#include <stdio.h>
#include <unordered_map>
#define MAXN 100
using std::unordered_map;
int n, s;
int v[MAXN];
int mod;
struct elem{
int a;
int b;
int c;
};
// sume de 3 elemente
unordered_map<int, elem> map3;
int main(){
FILE *fin, *fout;
fin = fopen("loto.in", "r");
fscanf(fin, "%d%d", &n, &s);
for(int i=0; i<n; i++){
fscanf(fin, "%d", &v[i]);
}
std::sort(v, v+n);
fclose(fin);
fout = fopen("loto.out", "w");
bool ok = false;
for(int i=0; i<n; i++){
if(v[i]>s) break;
for(int j=0; j<n; j++){
if(v[i]+v[j]>s) break;
for(int k=0; k<n; k++){
if(v[i]+v[j]+v[k]>s) break;
map3[v[i]+v[j]+v[k]] = {v[i], v[j], v[k]};
if(map3.count(s - v[i] - v[j] - v[k])){
auto other = map3[s - v[i] - v[j] - v[k]];
ok = true;
fprintf(fout, "%d %d %d %d %d %d\n",
v[i], v[j], v[k],
other.a, other.b, other.c);
break;
}
}
if(ok) break;
}
if(ok) break;
}
if(!ok)
fprintf(fout, "-1\n");
fclose(fout);
return 0;
}