#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,n) for(long long (i)=0;(i)<(long long)(n);(i)++) #define RREP(i,n) for(long long (i)=(long long)(n)-1;i>=0;i--) #define REMOVE(Itr,n) (Itr).erase(remove((Itr).begin(),(Itr).end(),n),(Itr).end()) #define UNIQUE(Itr) sort((Itr).begin(),(Itr).end()); (Itr).erase(unique((Itr).begin(),(Itr).end()),(Itr).end()) typedef long long ll; map< ll, vector< vector > > M1; int main(){ ll N,S; cin>>N>>S; vector< pair > P1,P2; REP(i,N){ ll t; cin>>t; if(i t; ll sum=0; REP(j,P1.size()){ if((i>>j)&1){ sum+=P1[j].first; t.push_back(P1[j].second); } } M1[sum].push_back(t); } vector< vector > ans; for(int i=0;i<(1< t; ll sum=0; REP(j,P2.size()){ if((i>>j)&1){ sum+=P2[j].first; t.push_back(P2[j].second); } } if(M1.find(S-sum)!=M1.end()){ REP(j,M1[S-sum].size()){ vector anst=t; REP(k,M1[S-sum][j].size())anst.push_back(M1[S-sum][j][k]); ans.push_back(anst); } } } REP(i,ans.size())sort(ans[i].begin(),ans[i].end()); sort(ans.begin(),ans.end()); REP(i,ans.size()){ REP(j,ans[i].size()-1)cout<