#include <iostream>
using namespace std;
const int N = 110;
int m, n;
int f[N][N];
string na[N];
int nu[N], w[N], sp[N];
int main() {
cin >> m >> n;
int r = 21 - m;//剩余格子数
for (int i = 1; i <= n; i++) {
cin >> nu[i] >> w[i] >> sp[i] >> na[i];
for (int j = 1; j <= i - 1; j++) {
if (na[i] == na[j]) {
nu[j] += nu[i];
n --;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = r; j >= 1; j --) {
for (int k = 0; k <= nu[i]; k ++) {
int s = sp[i];
while (1) {
if (s >= nu[i]) {
s /= sp[i];
break;
} else
s += sp[i];
}
if (j - s >= 0)
f[i][j] = max(f[i - 1][j], f[i - 1][j - s] + w[i] * k);
}
}
}
cout << f[n][r];
return 0;
}