#include #include #include #include int main() { using namespace std; int n, s, m; cin >> n >> s; m = n / 2; vector p1(m), p2(n - m); for (auto &e : p1) { cin >> e; } for (auto &e : p2) { cin >> e; } map> mp1, mp2; for (int bit = 0; bit < (1 << m); bit++) { int buy = 0, price = 0; for (int i = 0; i < m; i++) { if (bit >> i & 1) { buy |= 1 << i; price += p1[i]; } } mp1[price].push_back(buy); } for (int bit = 0; bit < (1 << (n - m)); bit++) { int buy = 0, price = 0; for (int i = 0; i < (n - m); i++) { if (bit >> i & 1) { buy |= 1 << i; price += p2[i]; } } mp2[price].push_back(buy); } vector> ans; for (auto [price, vec] : mp1) { if (!mp2.contains(s - price)) { continue; } for (int buy1 : vec) { vector a1; for (int i = 0; i < m; i++) { if (buy1 >> i & 1) { a1.push_back(i + 1); } } for (int buy2 : mp2[s - price]) { vector a2 = a1; for (int i = 0; i < (n - m); i++) { if (buy2 >> i & 1) { a2.push_back(i + m + 1); } } ans.push_back(a2); } } } sort(ans.begin(), ans.end()); for (auto a : ans) { for (int e : a) { cout << e << " "; } cout << "\n"; } }