#include using namespace std; int main() { int N, S, P[40] = {}; cin >> N >> S; for (int i = 0; i < N; i++) { cin >> P[i]; } int NN = N / 2; map> M1, M2; for (unsigned int bit = 0; bit < (1u << NN); bit++) { int sum = 0; for (int i = 0; i < NN; i++) { if (bit & (1u << i)) sum += P[i]; } M1[sum].push_back(bit); } for (unsigned int bit = 0; bit < (1u << N); bit += (1u << NN)) { int sum = 0; for (int i = NN; i < N; i++) { if (bit & (1u << i)) sum += P[i]; } M2[sum].push_back(bit); } vector ans; for (auto& p : M1) { auto V1 = p.second; if (M2.count(S - p.first)) { auto V2 = M2[S - p.first]; for (auto& y : V2) { for (auto& x : V1) { ans.push_back(x | y); } } } } sort(ans.begin(), ans.end(), [&](unsigned a, unsigned b) { for (int i = 0; i < N; i++) { if ((a & (1u << i)) != (b & (1u << i))) { return (a & (1u << i)) > (b & (1u << i)); } } }); for (auto& bit : ans) { for (int i = 0; i < N; i++) { if (bit & (1u << i)) { cout << i + 1 << " "; } } cout << endl; } }