#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int num[10010], arr[10010], n, m, flag;
vector<int> path;
void printpath()
{
int size = path.size(), i;
for(i = 0; i < size; i++)
{
if(i > 0)
{
printf(" ");
}
printf("%d", num[path[i]]);
}
printf("\n");
}
void dfs(int cur, int cursum)
{
if(cursum == m)
{
flag = 1;
printpath();
return;
}
int i, nextsum;
for(i = cur + 1; flag == 0 && i <= n; i++)
{
nextsum = cursum + num[i];
if(nextsum > m || arr[n] - arr[i] + nextsum < m)
{
break;
}
path.push_back(i);
dfs(i, nextsum);
path.pop_back();
}
}
int main()
{
scanf("%d%d", &n, &m);
int i, sum = 0;
for(i = 1; i <= n; i++)
{
scanf("%d", &num[i]);
sum += num[i];
}
sort(num + 1, num + n + 1);
for(i = 1; i <= n; i++)
{
arr[i] = arr[i - 1] + num[i];
}
for(i = 1; i <= n && flag == 0; i++)
{
path.push_back(i);
dfs(i, num[i]);
path.pop_back();
}
if(flag == 0)
{
printf("No Solution\n");
}
system("pause");
return 0;
}