#include <stdio.h>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
std::vector<int>_vNumbers,_vTickets;
struct TSuma
{
int iSuma,iIndex1,iIndex2,iIndex3;
TSuma(int iNewSuma, int iNewIndex1, int iNewIndex2,int iNewIndex3)
{
iSuma=iNewSuma;
iIndex1=iNewIndex1; iIndex2=iNewIndex2;
iIndex3=iNewIndex3;
}
bool operator<(const TSuma& another) const
{
return iSuma<another.iSuma;
}
bool operator==(const TSuma& another) const
{
return iSuma==another.iSuma;
}
};
set <TSuma> _vSumTriplets;
//----------------------------------------------------
void PrintSumTriplets()
{
std::set<TSuma>::iterator it;
it=_vSumTriplets.begin();
while (it!=_vSumTriplets.end())
{
TSuma el=*it;
printf("%d %d %d %d \n",el.iSuma,el.iIndex1,el.iIndex2,el.iIndex3);
it++;
}
}
//----------------------------------------------------
void citire(int *iSuma)
{
FILE * fin = fopen("loto.in","r");
int iN;
fscanf(fin,"%d %d",&iN,iSuma);
int iNumber;
for (int i=0; i<iN; i++)
{
fscanf(fin,"%d",&iNumber);
if (iNumber <= *iSuma)
_vNumbers.push_back(iNumber);
}
fclose(fin);
}
//----------------------------------------------------
int main()
{
int iSuma;
citire(&iSuma);
_vTickets=_vNumbers;
/*
sort(_vNumbers.begin(),_vNumbers.end());
for (int i=0; i<_vNumbers.size(); i++)
{
while ((i<_vNumbers.size())&&(_vNumbers[i]==_vNumbers[i+1])) i++;
_vTickets.push_back(_vNumbers[i]);
}
*/
int i,j,q,iS,iS2,iS3;
for (i=0; i<_vTickets.size(); i++)
for (j=0; j<_vTickets.size(); j++)
{
iS2=_vTickets[i]+_vTickets[j];
if (iS2<=iSuma)
for (q=0; q<_vTickets.size(); q++)
{
iS=iS2+_vTickets[q];
if (iS<=iSuma)
{
TSuma NewElement=TSuma(iS,i,j,q);
_vSumTriplets.insert(NewElement);
}
}
}
FILE * fout = fopen("loto.out","w");
// PrintSumTriplets();
int iDiff;
std::set<TSuma>::iterator it,itIndex;
for (itIndex=_vSumTriplets.begin(); itIndex!=_vSumTriplets.end(); ++itIndex)
{
iDiff=iSuma-itIndex->iSuma;
TSuma elElement=TSuma(iDiff,1,1,1);
it = _vSumTriplets.find(elElement);
if (it!=_vSumTriplets.end())
{
fprintf(fout,"%d %d %d %d %d %d",_vTickets[itIndex->iIndex1],_vTickets[itIndex->iIndex2],_vTickets[itIndex->iIndex3],
_vTickets[it->iIndex1],_vTickets[it->iIndex2],_vTickets[it->iIndex3]);
fclose(fout);
return 0;
}
}
fprintf(fout,"-1");
fclose(fout);
return 0;
}