#include<vector>
using namespace std;
int main(){
int N,m;//可以看成0-1背包问题,N是总价格,可以看成背包容量。
cin>>N>>m;
N/=10;//因为价格都是10的倍数,所以可以除以10来减少循环次数。
//一个主件最多可以有两个配件,在第0号位存主件,1号位存1号配件,2号位存2号配件。
vector<vector<int>> price(m+1,vector<int>(3,0));
vector<vector<int>> value(m+1,vector<int>(3,0));
for(int i=1;i<=m;i++){
int v,p,q;
cin>>v>>p>>q;
if(q==0){//如果是主件,就在price[i]的0号位记录下
price[i][0]=v/10;
value[i][0]=p;
}
else{//如果是配件,查对应的主件,如果主件一号位是空的,就放在一号位。
if(price[q][1]==0){
price[q][1]=v/10;
value[q][1]=p;
}
else{
price[q][2]=v/10;
value[q][2]=p;
}
}
}
vector<vector<int>> dp(m+1,vector<int>(N+1,0));//构造dp数组
for(int i=1;i<=m;i++)
{
for(int j=1;j<=N;j++){
int a=price[i][0],b=value[i][0];
int c=price[i][1],d=value[i][1];
int e=price[i][2],f=value[i][2];
if(j>=a){
dp[i][j]=max(dp[i-1][j-a]+a*b,dp[i-1][j]);//如果能放进去主件,就考虑是否放入主件的情况。
}
else{
dp[i][j]=dp[i-1][j];//第i个主件不放进去。
}
//这时候如果可以再放入配件,就考虑放入配件的情况.注意放入配件的同时要放入主件。
if(j>=a+c){
dp[i][j]=max((dp[i-1][j-a-c]+a*b+c*d),dp[i][j]);
}
if(j>=a+e){
dp[i][j]=max(dp[i-1][j-a-e]+a*b+e*f,dp[i][j]);
}
if(j>=a+e+c){
dp[i][j]=max(dp[i-1][j-a-c-e]+a*b+c*d+e*f,dp[i][j]);
}
}
}
cout<<dp[m][N]*10<<endl;
}