#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 105
#define MAXM 1005
int n;
int weight[MAXN], value[MAXN], num[MAXN];
int f[MAXM];
inline int getMax(int a, int b)
{
return a > b ? a : b;
}
inline void ZeroOnePack(int w, int v)
{
for(int j = n; j >= w; j--)
{
f[j] = getMax(f[j], f[j - w] + v);
}
}
inline void CompletePack(int w, int v)
{
for(int j = w; j <= n; j++)
{
f[j] = getMax(f[j], f[j - w] + v);
}
}
inline void MultiplePack(int w, int v, int amount)
{
if(amount * w >= n)
{
CompletePack(w, v);
return;
}
for(int k = 1; k < amount; k <<= 1)
{
// printf("k=%d\n", k);
ZeroOnePack(k * w, k * v);
amount -= k;
}
// printf("amount=%d\n", amount);
ZeroOnePack(amount * w, amount *v);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("indata.txt", "r", stdin);
#endif
int cas;
scanf("%d", &cas);
while(cas--)
{
int m, i;
scanf("%d %d", &n, &m);
for(i = 1; i <= m; i++) scanf("%d %d %d", &weight[i], &value[i], &num[i]);
memset(f, 0, sizeof(f));
for(i = 1; i <= m; i++)
{
MultiplePack(weight[i], value[i], num[i]);
}
printf("%d\n", f[n]);
}
return 0;
}