#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;
    }
}