#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int N, x; cin >> N >> x; vector P(N); for (int i = 0; i < N; i++) cin >> P[i]; int n = N / 2, _n = N - n; vector sum(1 << n), _sum(1 << _n); for (int S = 0; S < (1 << n); S++) for (int i = 0; i < n; i++) if (S & (1 << i)) sum[S] += P[i]; for (int S = 0; S < (1 << _n); S++) for (int i = 0; i < _n; i++) if (S & (1 << i)) _sum[S] += P[n + i]; vector< vector > w; for (int S = 0; S < (1 << n); S++) { int y = x - sum[S]; for (int _S = 0; _S < (1 << _n); _S++) if (_sum[_S] == y) { vector v; for (int i = 0; i < n; i++) if (S & (1 << i)) v.push_back(i); for (int i = 0; i < _n; i++) if (_S & (1 << i)) v.push_back(n + i); w.push_back(v); } } sort(w.begin(), w.end()); for (int j = 0; j < w.size(); j++) { vector& v = w[j]; for (int k = 0; k < v.size(); k++) cout << v[k] + 1 << (k + 1 < v.size() ? ' ' : '\n'); } }