#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i, n) for(ll i = 0;i < n;i++) #define REPR(i, n) for(ll i = n;i >= 0;i--) #define FOR(i, m, n) for(ll i = m;i < n;i++) #define FORR(i, m, n) for(ll i = m;i >= n;i--) #define REPO(i, n) for(ll i = 1;i <= n;i++) #define ll long long #define INF (ll)1 << 60 #define MINF (-1 * INF) #define ALL(n) n.begin(),n.end() #define MOD 1000000007 #define P pair ll n, sum, s[40]; vector

a, b; vector>ans; int main() { cin >> n >> sum; ll h = n / 2; REP(i, n)cin >> s[i]; REP(i, 1 << h) { ll now = 0; REP(j, h) { if (i & (1ll << j))now += s[j]; } if (sum >= now)a.push_back(P(now, i)); } REP(i, 1 << (n - h)) { ll now = 0; REP(j, (n - h)) { if (i & (1ll << j))now += s[h + j]; } if (sum >= now)b.push_back(P(now, i)); } sort(ALL(b)); vector c; REP(i, b.size())c.push_back(b[i].first); REP(i, a.size()) { auto i1 = lower_bound(ALL(c), sum - a[i].first); auto i2 = lower_bound(ALL(c), sum - a[i].first + 1); FOR(j, i1 - c.begin(), i2 - c.begin()) { vector now; REP(k, h) { if (a[i].second & (1ll << k))now.push_back(k + 1); } REP(k, (n - h)) { if (b[j].second & (1ll << k))now.push_back(h + k + 1); } ans.push_back(now); } } sort(ALL(ans)); REP(i, ans.size()) { REP(j, ans[i].size()) { if (j != 0)cout << " "; cout << ans[i][j]; } cout << endl; } }