import java.io.*;
public class Main{
static int Inf = 1000000000 + 10;
static Edge e[] = new Edge[6000];
static int d[] = new int[510] ;
static int n, m, w, s, t, l, top;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer in = new StreamTokenizer(br);
int F = nextInt(in);
while (F-- != 0) {
top = 0;
n = nextInt(in);
m = nextInt(in);
w = nextInt(in);
for (int i = 0; i < m; i++) {
s = nextInt(in);
t = nextInt(in);
l = nextInt(in);
e[top++] = new Edge(s, t, l);
e[top++] = new Edge(t, s, l);
}
for (int i = 0; i < w; i++) {
s = nextInt(in);
t = nextInt(in);
l = nextInt(in);
e[top++] = new Edge(s, t, -l);
}
if (Bellman_Ford()) {
System.out.println("NO");
} else {
System.out.println("YES");
}
}
}
private static boolean Bellman_Ford() {
for (int i = 0; i < d.length; i++) {
d[i] = Inf;
}
d[0] = 0;
int check;
for (int i = 0; i < n - 1; i++) {
check = 0;
for (int j = 0; j < top; j++) {
if (d[e[j].t] > d[e[j].s] + e[j].l) {
d[e[j].t] = d[e[j].s] + e[j].l;
check=1;
}
}
if (check == 0) {
break;
}
}
for (int i = 0; i < top; i++) {
if (d[e[i].t] > d[e[i].s] + e[i].l) {
return false;
}
}
return true;
}
private static int nextInt(StreamTokenizer in) throws Exception {
in.nextToken();
return (int) in.nval;
}
static class Edge {
int s;
int t;
int l;
public Edge(int _s, int _t, int _l) {
this.s = _s;
this.t = _t;
this.l = _l;
}
}
}