#include using namespace std; int main(){ cin.tie(nullptr)->sync_with_stdio(false); int N, S; cin >> N >> S; vector P(N); for(int& x: P) cin >> x; int N0 = N / 2, N1 = N - N0; vector P0, P1; for(int i = 0; i < N0; ++i) P0.emplace_back(P[i]); for(int i = 0; i < N1; ++i) P1.emplace_back(P[N0 + i]); auto f = [] (const vector& A){ const int N = A.size(); map> mp; for(int mask = 0; mask < (1 << N); ++mask){ int sum = 0; for(int i = 0; i < N; ++i){ if(~mask >> i & 1) continue; sum += A[i]; } mp[sum].emplace_back(mask); } return mp; }; auto mp0 = f(P0), mp1 = f(P1); vector> ans; for(auto& [s0, v0]: mp0){ auto v1 = mp1[S - s0]; if(v1.empty()) continue; for(int a0: v0){ for(int a1: v1){ ans.emplace_back(); auto& a = ans.back(); for(int i = 0; i < N0; ++i) if(a0 >> i & 1){ a.emplace_back(i + 1); } for(int i = 0; i < N1; ++i) if(a1 >> i & 1){ a.emplace_back(N0 + i + 1); } } } } sort(ans.begin(), ans.end()); for(auto& v: ans) for(int i = 0; i < v.size(); ++i){ cout << v[i] << " \n"[i == v.size() - 1]; } return 0; }