package main
import (
"fmt"
)
func Max(a, b int) int {
if a>b{
return a
}
return b
}
func main() {
var n, m int
fmt.Scan(&n, &m)
var value = make([][]int, m+1) // 附件的主件索引是从1开始的
var weight = make([][]int, m+1)
var dp = make([]int, n+1)
var v, w, q int
for i:=0;i<=m;i++{
value[i] = make([]int, 3)
weight[i] = make([]int, 3)
}
for i:=1;i<=m;i++{
fmt.Scan(&v, &w, &q)
if q == 0{ // 主件
value[i][0]=v
weight[i][0]=w*v
}else if value[q][1] == 0 { // 作为附件1
value[q][1] =v
weight[q][1] = w*v
}else{ // 作为附件2
value[q][2] =v
weight[q][2] = w*v
}
}
for i:=1;i<=m;i++{
for j:= n;j>=0;j-=10{
if value[i][0]!=0 && value[i][0] <= j {
// 只考虑主件
dp[j] = Max(dp[j], weight[i][0] + dp[j-value[i][0]])
}
if value[i][0]!=0 && value[i][1]!=0 && value[i][0] + value[i][1] <= j{
// 考虑主件和附件1
dp[j] = Max(dp[j], weight[i][0] + weight[i][1] + dp[j-value[i][0] - value[i][1]])
}
if value[i][0]!=0 && value[i][2]!=0 && value[i][0] + value[i][2] <= j{
// 考虑主件和附件2
dp[j] = Max(dp[j], weight[i][0] + weight[i][2] + dp[j-value[i][0] - value[i][2]])
}
if value[i][0]!=0 && value[i][1]!=0 && value[i][2]!=0 && value[i][0] + value[i][1] + value[i][2] <= j{
// 考虑主件、附件1和附件2
dp[j] = Max(dp[j], weight[i][0] + weight[i][1] + weight[i][2] + dp[j-value[i][0] - value[i][1] - value[i][2]])
}
}
}
fmt.Println(dp[n])
}