1 //典型的多重背包
2 #include <iostream>
3 #include <cstring>
4 using namespace std;
5 int d[1005];
6 int n,m;
7 void zb(int r,int v)
8 {
9 for(int i = n; i >= r; --i)
10 if(d[i-r] + v > d[i])
11 d[i] = d[i-r] + v;
12 }
13 void cb(int r,int v)
14 {
15 for(int i = r; i <= n; ++i)
16 if(d[i-r] + v > d[i])
17 d[i] = d[i-r] + v;
18 }
19 void mb(int r,int v,int t)
20 {
21 if(t*r >= n) cb(r,v);
22 else
23 {
24 for(int i = 1; i < t; i<<=1)
25 {
26 zb(i*r,i*v);
27 t -= i;
28 }
29 zb(t*r,t*v);
30 }
31 }
32 int main()
33 {
34 int t;
35 cin >> t;
36 while(t--)
37 {
38 memset(d,0,sizeof d);
39 cin >> n >> m;
40 while(m--)
41 {
42 int a,b,c;
43 cin >> a >> b >> c;
44 mb(a,b,c);
45 }
46 cout << d[n] << endl;
47 }
48 return 0;
49 }