#include<bits/stdc++.h>
using namespace std;
long long n,m,dp[32001];
struct node{
int v,s;
};
node mit[61][5];
node fit[61][3];
int fn[61];
int main()
{
cin>>n>>m;
int k=1;
for(int i=1;i<=m;i++)
{
node t;
int imp,g;
cin>>t.v>>imp>>g;
t.s=t.v*imp;
if(g==0)
{
for(int j=1;j<=4;j++)
{mit[k][j]=t;}
k+=1;
}
else
{
fn[g]+=1;
fit[g][fn[g]]=t;
}
}
for(int g=1;g<k;g++)
{
if(fn[g])
{
mit[g][2].v+=fit[g][1].v;
mit[g][2].s+=fit[g][1].s;
}
if(fn[g]==2)
{
mit[g][3].v+=fit[g][2].v;
mit[g][3].s+=fit[g][2].s;
mit[g][4].v+=fit[g][1].v+fit[g][2].v;
mit[g][4].s+=fit[g][1].s+fit[g][2].s;
}
}
for(int i=1;i<k;i++)
{
for(int j=n;j>=0;j--)
{
for(int g=1;g<=4;g++)
{
if(j>=mit[i][g].v)
dp[j]=max(dp[j],dp[j-mit[i][g].v]+mit[i][g].s);
}
}
}
cout<<dp[n];
}