#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int N,M,coin[10000];
vector<int>path;
bool dfs(int cur,int curmoney)
{
path.emplace_back(coin[cur]);
if(curmoney==M){
return true;
}
else{
for(int i=cur+1;i<N&&curmoney+coin[i]<=M;){
if(dfs(i,curmoney+coin[i])==true)return true;
else{
int j;
for(j=i+1;j<N&&coin[j]==coin[i];j++);
i=j;
}
}
}
path.pop_back();
return false;
}
int main()
{
int i,j;
cin>>N>>M;
for(i=0;i<N;i++)cin>>coin[i];
sort(coin,coin+N);
for(i=0;i<N&&coin[i]<=M;){
if(dfs(i,coin[i])==true){
for(i=0;i<path.size();i++){
if(i)cout<<' ';
cout<<path[i];
}
return 0;
}
else{
for(j=i+1;j<N&&coin[j]==coin[i];j++);
i=j;
}
}
cout<<"No Solution";
}