#include <stdio.h>
#include <string.h>
#define MAX 200
int f[MAX], v_max;
int _max(int a, int b){ return a > b ? a : b;}
void ZeroOnePack(int cost, int weight)
{
for(int v = v_max; v >= cost; v--)
f[v] = _max(f[v], f[v - cost] + weight);
}
void CompletePack(int cost, int weight)
{
for(int v = cost; v <= v_max; v++)
f[v] = _max(f[v], f[v - cost] + weight);
}
void MultiplePack(int cost, int weight, int amount)
{
if(cost * amount > v_max){
CompletePack(cost, weight);
return ;
}
int k = 1;
while(k < amount){
ZeroOnePack(k * cost, k * weight);
amount -= k;
k <<= 1;
}
ZeroOnePack(amount * cost, amount * weight);
}
int main()
{
int cases, n, m, c, w, a, ans;
scanf("%d", &cases);
while(cases--)
{
memset(f, 0, sizeof(f));
scanf("%d%d", &n, &m);
v_max = n;
for(int i=1; i<=m; i++){
scanf("%d%d%d", &c, &w, &a);
MultiplePack(c, w, a);
}
ans = 0;
for(int i=0; i<=v_max; i++)
if(ans < f[i])
ans = f[i];
printf("%d\n", ans);
}
return 0;
}