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])