#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int f[65],g[65][5],h[65][5],v[65],p[65];
int ans[32005];
int main () {
int n,m;
scanf ("%d%d",&n,&m);
for (int i=1;i<=m;i++) {
int q;
scanf ("%d%d%d",&v[i],&p[i],&q);
if (q==0) {
g[i][++g[i][0]]=v[i];
h[i][++h[i][0]]=v[i]*p[i];
} else {
g[q][++g[q][0]]=v[i]+v[q];
h[q][++h[q][0]]=v[i]*p[i]+v[q]*p[q];
if (f[q]==0) {
f[q]=i;
} else {
g[q][++g[q][0]]=v[i]+v[q]+v[f[q]];
h[q][++h[q][0]]=v[i]*p[i]+v[q]*p[q]+v[f[q]]*p[f[q]];
}
}
}
memset (ans,-1,sizeof (ans)); ans[0]=0;
for (int i=1;i<=m;i++) {
for (int j=n;j>0;j--) {
int s1=max (j<g[i][1]||ans[j-g[i][1]]==-1?-1:ans[j-g[i][1]]+h[i][1],j<g[i][2]||ans[j-g[i][2]]==-1?-1:ans[j-g[i][2]]+h[i][2]);
int s2=max (j<g[i][3]||ans[j-g[i][3]]==-1?-1:ans[j-g[i][3]]+h[i][3],j<g[i][4]||ans[j-g[i][4]]==-1?-1:ans[j-g[i][4]]+h[i][4]);
ans[j]=max (ans[j],max (s1,s2));
}
}
for (int i=0;i<n;i++) ans[n]=max (ans[n],ans[i]);
printf ("%d",ans[n]);
return 0;
}