N, m = map(int, input().split()) zhu = {} fu = {} for k in range(1, m + 1): v, p, q = map(int, input().split()) if q == 0: zhu[k] = [v, v * p] else: if q in fu: fu[q].append([v, v * p]) else: fu[q] = [[v, v * p]] #print(">>>zhu=", zhu) #print(">>>fu=", fu) dp = [0 for j in range(N + 1)] for k, t in zhu.items(): w = [] va = [] w.append(t[0]) va.append(t[1]) if k in fu: # 主件 + 附件1 w.append(w[0] + fu[k][0][0]) va.append(va[0] + fu[k][0][1]) if len(fu[k]) > 1: # 表示有两个以上附件 # 主件 + 附件2 w.append(w[0] + fu[k][1][0]) va.append(va[0] + fu[k][1][1]) # 主件 + 附件1 + 附件2 w.append(w[0] + fu[k][0][0] + fu[k][1][0]) va.append(va[0] + fu[k][0][1] + fu[k][1][1]) # print('>>>w=', w) # print('>>>va=', va) # 处理数据,注意此处for的缩进 for j in range(N, -1, -10): for i, _ in enumerate(w): # w代表价格 if j >= w[i]: dp[j] = max(dp[j], dp[j - w[i]] + va[i]) # 输出 print(dp[N])