#include using namespace std; using ll = long long; int main() { int N, M; cin >> N >> M; vector e(N), v(M), w(M); for (int i = 0; i < N; i++) cin >> e[i]; for (int i = 0; i < M; i++) cin >> v[i] >> w[i]; vector sum_v(1< sum_w(1<>i & 1) { sum_v[S] += v[i]; sum_w[S] += w[i]; } } } vector> dp(N+1, vector(1<> ans(N); for (int i = N; i > 0; i--) { vector a; for (int T = S; ; T = (T-1) & S) { // dp[i-1][S^T] -> dp[i][S] if (dp[i][S] == dp[i-1][S^T] + sum_v[T] && sum_w[T] <= e[i-1]) { for (int j = 0; j < M; j++) { if (T>>j & 1) a.push_back(j+1); } S ^= T; break; } } ans[i-1] = a; } cout << m << endl; for (int i = 0; i < N; i++) { cout << ans[i].size(); for (int j : ans[i]) cout << " " << j; cout << endl; } }