#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define myPair pair<int,int>
#define mp make_pair
#define fi first
#define se second
#define qmax priority_queue<int>
#define qmin priority_queue<int,vector<int>,greater<int>>
#define all(x) x.begin(),x.end()
#define FOR(i,a,b) for(int i = a; i <= b; i++)
#define FORR(i,a,b) for(int i = a; i >= b; i--)

const int mxn = 1e6 + 10;
vector<int> g[mxn];
int n, r, m;	// number of vertices, edges and soldiers respectively
int color[mxn];
vector<pair<int,int>> sol;
bool flag;

void dfs(int u, int par, int level, int k)
{
	if(level == k + 1)
		return;

	color[u] = 1;
	for(int v : g[u]) {
		if(v == par)
			continue;
		if(!color[v])
			dfs(v, u, level + 1, k);
		else if(color[v] && level != k)
			flag = 0;
	}
}

void solve()
{
	cin >> n >> r >> m;
	FOR(i, 1, n) {
		g[i].clear();
	}
	sol.clear();
	FOR(i, 1, r) {
		int u, v;	cin >> u >> v;
		g[u].pb(v);
		g[v].pb(u);
	}
	FOR(i, 1, m) {
		int a, b;	cin >> a >> b;
		sol.pb(mp(a, b));	// city number and soldier's strength
	}
	memset(color, 0, sizeof(color));

	flag = 1;
	for(auto it : sol)
	{
		int city = it.fi;
		if(!color[city])
			dfs(city, -1, 0, it.se);
		else if(color[city]) {
			flag = 0;
			break;
		}
	}
	
	FOR(i, 1, n) {
		if(!color[i]) {
			flag = 0;
			break;
		}
	}

	if(flag)
		cout << "Yes\n";
	else
		cout << "No\n";
}

int32_t main()
{
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int t;
	cin>>t;
	while(t--)
		solve();
	
	return 0;
}