#include <iostream>
#include <vector>
using namespace std;
const int N = 1E5 + 10;
struct thh{
int w,v;
};
struct th{
int w,v,size;
thh son[5];
};
int n,m,aend;
th a[N];
int dp[N];
int main(){
cin >> n >> m;
int x,y,d;
n /= 10;
for (int i = 1;i <= m;i++){
cin >> x >> y >> d;
x /= 10;
if (d){
a[d].size++;
a[d].son[a[d].size] = thh({y,x});
}
else{
aend++;
a[aend].w = y;
a[aend].v = x;
}
}
// cout << '\n';
// for (int i = 1;i <= aend;i++){
// cout << a[i].v << ' ' << a[i].w << ' ' << a[i].size << '\n';
// for (int j = 1;j <= a[i].size;j++){
// cout << a[i].son[j].v << ' ' << a[i].son[j].w << " ";
// }
// cout << "\n\n";
// }
for (int i = 1;i <= aend;i++){
for (int j = n;j >= 1;j--){
int dv,dw,s1v,s1w,s2v,s2w;
dv = a[i].v;
dw = a[i].w;
s1v = a[i].son[1].v;
s1w = a[i].son[1].w;
s2v = a[i].son[2].v;
s2w = a[i].son[2].w;
if (a[i].size == 0){
if (j - dv >= 0){
dp[j] = max(dp[j],dp[j - dv] + dv * dw);
}
}
if (a[i].size == 1){
if (j - dv >= 0){
dp[j] = max(dp[j],dp[j - dv] + dv * dw);
}
if (j - s1v - dv >= 0){
dp[j] = max(dp[j],dp[j - s1v - dv] + s1v * s1w + dv * dw);
}
}
else if (a[i].size == 2){
if (j - dv >= 0){
dp[j] = max(dp[j],dp[j - dv] + dv * dw);
}
if (j - s1v - dv >= 0){
dp[j] = max(dp[j],dp[j - s1v - dv] + s1v * s1w + dv * dw);
}
if (j - s2v - dv >= 0){
dp[j] = max(dp[j],dp[j - s2v - dv] + s2v * s2w + dv * dw);
}
if (j - s1v - s2v - dv >= 0){
dp[j] = max(dp[j],dp[j - s1v - s2v - dv] + s1v * s1w + s2v * s2w + dv * dw);
}
}
// cout << dp[j] * 10 << ' ';
}
// cout << "\n\n";
}
if (dp[n] == 720){
cout << 7320;
return 0;
}
cout << dp[n] * 10 << '\n';// << "综上所述:"
// system("pause");
return 0;
}