#include <bits/stdc++.h>
using namespace std;
#define maxn 1000005#define INF 11111111int n, m;
struct node {
int t, u;//价值 花费
}p[maxn], q[maxn];
int tot;
int P;
int dp[maxn];
int scan () {
char ch=' ';
while(ch<'0'||ch>'9')ch=getchar();
intx=0;
while(ch<='9'&&ch>='0')x=x*10+ch-'0',ch=getchar();
returnx;
}
int main () {
int T;
scanf ("%d", &T);
while (T--) {
scanf ("%d%d%d", &n, &m, &P);
tot = 0;
for (int i = 1; i <= n; i++) {
int t, u, v;
t = scan (), u = scan (), v = scan ();
for (int bit = 1; bit <= v; bit<<=1) {
p[tot++] = (node) {bit*t, bit*u};
v -= bit;
}
if (v) {
p[tot++] = (node) {v*t, v*u};
}
}
for (int i = 1; i <= P; i++) dp[i] = INF; dp[0] = 0;
for (int i = 0; i < tot; i++) {//背包能量为i的最小空间
for (int j = P; j > 0; j--) {
if (j < p[i].t) {
dp[j] = min (dp[j], p[i].u);
}
else {
dp[j] = min (dp[j], dp[j-p[i].t]+p[i].u);
}
}
}
int ans = dp[P];//得到最少能量的最少的体积
int sum = 0;
tot = 0;
for (int i = 1; i <= m; i++) {
int t, u, v;
t = scan (), u = scan (), v = scan ();
sum += t*v;
for (int bit = 1; bit <= v; bit<<=1) {
p[tot++] = (node) {bit*t, bit*u};
v -= bit;
}
if (v) {
p[tot++] = (node) {v*t, v*u};
}
}
if (sum < ans) {
printf ("TAT\n");
continue;
}
//dp[i]花费是i的最大空间
memset (dp, 0, sizeof dp);
for (int i = 0; i < tot; i++) {
for (int j = 50000; j >= p[i].u; j--) {
dp[j] = max (dp[j], dp[j-p[i].u]+p[i].t);
}
}
for (int i = 1; i <= 50000; i++) if (dp[i] >= ans) {
printf ("%d\n", i);
goto out;
}
printf ("TAT\n");
out: ;
}
return0;
}