using namespace std;
int list1[10];
//insersorrt function
void sorrt(int list[],int size)
{
for(int i=0;i<size;i++)
{
int max=list[i];
int k;
for(k=i-1;k>=0&&list[k]>max;k--)
{
list[k+1]=list[k];
}
list[k+1]=max;
}
}
void fun(int x,int y,int z,int list[],int m)
{
if(z==m)
{
for(int i=0;i<y;i++)
cout<<list1[i]<<" ";
cout<<endl;
}
else
{
for(x;x<10;x++)
{
if(list[x]<=m-z)
{
list1[y]=list[x];
fun(x+1,y+1,z+list[x],list,m);
}
}
}
}
int main()
{
int list[10];//declare a array
//cin the array in circulation
for(int i=0;i<10;i++)
cin>>list[i];
//sorrt the array in insert sorrtion
sorrt(list,10);
//cin the number you want to funtion
int m;
cin>>m;
//use recursion function to breake up the number m
fun(0,0,0,list,m);
return 0;
}