#include <stdio.h>
#include <vector>
using namespace std;
const int NMAX = 100;
const int MOD = 666013;
struct ura{
int x, y, z, sum;
};
int v[NMAX + 1];
vector <ura> myhash[MOD];
void add_hash( int a, int b, int c, int suma ){
int i = 0, code = suma % MOD;
while( i < myhash[code].size() && suma != myhash[code][i].sum )
++i;
if( i == myhash[code].size() )
myhash[code].push_back({a, b, c, suma});
}
int search_hash( int suma ){
int i = 0, code = suma % MOD;
while( i < myhash[code].size() && suma != myhash[code][i].sum )
++i;
return (i < myhash[code].size()) ? i : -1;
}
void erase_hash( int suma ){
int i = 0, code = suma % MOD;
while( i < myhash[code].size() && suma != myhash[code][i].sum )
++i;
if( i < myhash[code].size() )
myhash[code].erase(myhash[code].begin() + i);
}
int main(){
int n, k, i, j, o, gasit, v1, v2, v3, v4, v5, v6, suma;
FILE *fin, *fout;
fin = fopen( "loto.in", "r" );
fout = fopen( "loto.out", "w" );
fscanf( fin, "%d%d", &n, &k );
for( i = 0; i < n; ++i )
fscanf( fin, "%d", &v[i] );
gasit = -1;
for( i = 0; i < n && gasit < 0; ++i )
for( j = i; j < n && gasit < 0; ++j )
for( o = j; o < n && gasit < 0; ++o ){
add_hash(v[i], v[j], v[o], suma = (v[i] + v[j] + v[o]));
gasit = search_hash(k - suma);
if( gasit >= 0 ){
v1 = v[i]; v2 = v[j]; v3 = v[o];
v4 = myhash[(k - suma) % MOD][gasit].x; v5 = myhash[(k - suma) % MOD][gasit].y; v6 = myhash[(k - suma) % MOD][gasit].z;
}
}
if( gasit < 0 )
fprintf( fout, "-1" );
else
fprintf( fout, "%d %d %d %d %d %d", v1, v2, v3, v4, v5, v6 );
fclose( fin );
fclose( fout );
return 0;
}