import sys
def main():
# 1. 读取预算n和物品数m,预算÷10简化计算
n, m = map(int, sys.stdin.readline().split())
n //= 10 # 简化后预算单位:10元/单位
# 存储主件及对应附件:主件列表格式为 (主件v, 主件val, 附件列表)
master_list = []
# 临时字典:key=主件ID,value=主件的附件列表(先初始化主件,再填附件)
att_map = dict()
# -------------------------- 第一步:先读取所有物品,仅初始化主件 --------------------------
# 先存储所有物品的原始数据(避免二次读入),格式:(v, val, q, item_id)
all_items = []
for item_id in range(1, m + 1):
v, w, q = map(int, sys.stdin.readline().split())
v //= 10 # 价格简化
val = v * w # 满意度
all_items.append((v, val, q, item_id))
# 遍历所有物品,先初始化主件(q=0),确保att_map中有所有主件ID
for v, val, q, item_id in all_items:
if q == 0:
attachments = [] # 初始化该主件的空附件列表
master_list.append((v, val, attachments))
att_map[item_id] = attachments # 主件ID存入att_map,绑定附件列表
# -------------------------- 第二步:再遍历所有物品,处理附件(q≠0) --------------------------
for v, val, q, item_id in all_items:
if q != 0:
# 此时q(主件ID)已在第一步初始化,att_map[q]必然存在
att_map[q].append((v, val))
# 3. 初始化DP数组:dp[j] = 简化后预算j时的最大满意度
dp = [0] * (n + 1)
# 4. 遍历每个主件,枚举所有合法策略(适配≤2个附件)
for main_v, main_val, attachments in master_list:
# 提前提取附件(最多2个),避免重复索引
a1_v, a1_val = (0, 0) if len(attachments) < 1 else attachments[0]
a2_v, a2_val = (0, 0) if len(attachments) < 2 else attachments[1]
# 逆序遍历预算(至少覆盖主件价格)
for j in range(n, main_v - 1, -1):
# 策略1:只买主件
dp[j] = max(dp[j], dp[j - main_v] + main_val)
# 策略2:主件 + 第一个附件
if len(attachments) >= 1 and j >= main_v + a1_v:
dp[j] = max(dp[j], dp[j - main_v - a1_v] + main_val + a1_val)
# 策略3:主件 + 第二个附件
if len(attachments) >= 2 and j >= main_v + a2_v:
dp[j] = max(dp[j], dp[j - main_v - a2_v] + main_val + a2_val)
# 策略4:主件 + 两个附件
if len(attachments) >= 2 and j >= main_v + a1_v + a2_v:
dp[j] = max(
dp[j], dp[j - main_v - a1_v - a2_v] + main_val + a1_val + a2_val
)
# 5. 还原预算单位,输出结果
print(dp[n] * 10)
if __name__ == "__main__":
main()