import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### n, m = na() e = na() v,w = zip(*[na() for _ in range(m)]) V, W = [0] * (1 << m), [0] * (1 << m) for i in range(1 << m): for j in range(m): if i >> j & 1: V[i] += v[j] W[i] += w[j] inf = 10 ** 18 dp = [[-inf] * (1 << m) for _ in range(n + 1)] prev = [[-1] * (1 << m) for _ in range(n + 1)] dp[0][0] = 0 for i in range(n): for S in range((1 << m) - 1, -1, -1): T = S while True: if W[T] <= e[i]: if dp[i+1][S] < dp[i][S - T] + V[T]: dp[i + 1][S] = dp[i][S - T] + V[T] prev[i + 1][S] = T if T == 0: break T = (T - 1) & S #print(dp) print(max(dp[n])) S = dp[n].index(max(dp[n])) ans = [] for i in range(n, 0, -1): ans.append([x+1 for x in range(m) if prev[i][S] >> x & 1]) S -= prev[i][S] for i in ans[::-1]: print(len(i), *i)