#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//解题思路,
//1、首先通过一系列操作提取出每个主件及其附件的价格和重要度;
//2、将该问题转化为0-1背包问题,每次判断当前位置在某一个价格下的最大满意度时,假设存在两个主件,
//考虑的是四种情况即:1、选择该位置主件;2、选择该位置主件+第一个附件;3、选择该位置主件+第二个附件;4、选择该位置主件+第一二附件;
int main()
{
    int N,m;
    cin >> N >> m;
    N /= 10;
    vector<vector<int>> things(m,vector<int>(6,0));
    vector<bool> flag(m,false);
    int a,b,c;
    for(int i=0;i<m;i++)
    {
        cin >> a >> b >> c;
        if(c == 0)
        {
            things[i][0] = a / 10;
            things[i][1] = b;
            flag[i] = true;
        }else
        {
            if(things[c-1][2] == 0)
            {
                things[c-1][2] = a/10;
                things[c-1][3] = b;
            }else{
                things[c-1][4] = a/10;
                things[c-1][5] = b;
            }
        }
    }
    vector<vector<int>> price;
    vector<vector<int>> value;
    for(int i=0;i<m;i++)
    {
        if(flag[i])
        {
            vector<int> tmp1,tmp2;
            for(int j=0;j<things[i].size();j+=2)
            {
                tmp1.push_back(things[i][j]);
                tmp2.push_back(things[i][j+1]);
            }
            price.push_back(tmp1);
            value.push_back(tmp2);
        }
    }
    int M = price.size();
    vector<vector<int>> dp(M+1,vector<int>(N+1,0));
    int price0,price1,price2,val0,val1,val2;
    for(int i=1;i<=M;i++)
    {
        for(int j=1;j<=N;j++)
        {
            price0 = price[i-1][0];
            price1 = price[i-1][1];
            price2 = price[i-1][2];
            val0 = value[i-1][0];
            val1 = value[i-1][1];
            val2 = value[i-1][2];
            if(j >= price0)
                dp[i][j] = max(dp[i-1][j],dp[i-1][j-price0]+price0*val0);
            else
                dp[i][j] = dp[i-1][j];
            if(price1>0 && j >= price0+price1)
                dp[i][j] = max(dp[i][j],dp[i-1][j-price0-price1]+price0*val0+price1*val1);
            if(price2>0 && j >= price0+price2)
                dp[i][j] = max(dp[i][j],dp[i-1][j-price0-price2]+price0*val0+price2*val2);
            if(price1>0 && price2>0 && j >= price0+price1+price2)
                dp[i][j] = max(dp[i][j],dp[i-1][j-price0-price1-price2]+
                                      price0*val0+price1*val1+price2*val2);
        }
    }
    cout << dp[M][N]*10 << endl;
    return 0;
}