#include<bits/stdc++.h>
#include <vector>
using namespace std;
int money,types,important;
int p[60];
int s[60];
int f[60];//f[i]==0代表是附属品
int main()
{
while(cin>>money>>types)
{
for(int i=1;i<=types;i++)
{
cin>>p[i]>>important>>f[i];
s[i]=p[i]*important;
}
vector<int> dp(money+1,0);
for(int i=1;i<=types;i++)
{
for(int j=money;j>=0;j-=10)
{
if(f[i]==0)//如果是主件
{
if(j-p[i]>=0)//如果能放下主件
dp[j]=max(dp[j],dp[j-p[i]]+s[i]);
int f1=0,f2=0;//假装有两个附属品
for(int k=1;k<=types;k++)
{
if(f[k]==i&&f1==0){ ;f1=k;};//找到第一个附属品
if(f[k]==i&&f1!=k) f2=k;//找到第二个附属品
if(f1&&f2) break; //找到两个,就不用继续了
}
if(j-p[i]-p[f1]>=0) //放得下第一个附件
dp[j]=max(dp[j],dp[j-p[i]-p[f1]]+s[i]+s[f1]);
if(j-p[i]-p[f2]>=0)//放得下第二个附近
dp[j]=max(dp[j],dp[j-p[i]-p[f2]]+s[i]+s[f2]);
if(j-p[i]-p[f1]-p[f2]>=0)//放得下两个附件
dp[j]=max(dp[j],dp[j-p[i]-p[f1]-p[f2]]+s[i]+s[f1]+s[f2]);
}
}
}
cout<<dp[money]<<endl;
}
}