#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define FOR(i,s,e) for (int i=(s); i<(e); i++)
#define FOE(i,s,e) for (int i=(s); i<=(e); i++)
#define FOD(i,s,e) for (int i=(s)-1; i>=(e); i--)
#define CLR(a,x) memset(a, x, sizeof(a))
#define EXP(i,l) for (int i=(l); i; i=qn[i])
#define N 100005
using namespace std;

int n, ne, nq, t, sz, m, x, y, ed, nxt, ITR, st;
int a[N], stk[N], w[N], l[N], v[N], scc[N], act[N], L[N], rk[N], q[N], sol[N];
int qd[N*4], qn[N*4], use[N];
vector<int> List[N];

void dfs(int x){
	v[x] = w[x] = ++t;
	stk[++sz] = x, act[x] = 1;

	for (int i=l[x]; i; i=qn[i]){
		if (!v[qd[i]]) dfs(qd[i]), w[x] = min(w[x], w[qd[i]]);
		else if (act[qd[i]]) w[x] = min(w[x], v[qd[i]]);
	}

	if (v[x] == w[x]){
		m++;
		do{
			scc[stk[sz]] = m;
			act[stk[sz]] = 0;
		}   while (stk[sz--] != x);
	}
}

void Tsort(int x){
	v[x] = 1;
	EXP(i,L[x]) if (!v[qd[i]]) Tsort(qd[i]);
	rk[x] = t--;
}

void Flood(int x){
	v[x] = ITR;
	/* candidate SCC here */
	if (x != st && use[x]){
		if (nxt == -1) nxt = x;
		else if (rk[x] < rk[nxt]) nxt = x;
		return;
	}
	EXP(i,L[x]) if (v[qd[i]] != ITR) Flood(qd[i]);
}

void solve(){
	scanf("%d%d%d", &n, &ne, &nq);
	FOR(i,0,nq) scanf("%d", &a[i]), --a[i];
	sort(a, a + nq);
	FOR(i,0,n) l[i] = v[i] = 0;
	t = sz = m = ed = 0;
	FOR(i,0,ne){
		++ed;
		scanf("%d%d", &x, &qd[ed]);
		--x, --qd[ed];
		qn[ed] = l[x];
		l[x] = ed;
	}
	FOR(i,0,n) if (!v[i]) dfs(i);

	FOE(i,1,m){
		use[i] = L[i] = v[i] = 0;
		List[i].clear();
	}
	FOR(i,0,nq){
		use[scc[a[i]]] = 1;
		List[scc[a[i]]].push_back(a[i]);
	}
	// t-sort the SCCs now
	FOR(i,0,n) EXP(j,l[i]){
		++ed;
		qd[ed] = scc[qd[j]];
		qn[ed] = L[scc[i]];
		L[scc[i]] = ed;
	}
	t = m;
	FOE(i,1,m) if (!v[i]) Tsort(i);
//	FOR(i,0,n) printf("%d scc %d\n", i, scc[i]);
//	FOE(i,1,m)  printf("%d rank %d use %d\n", i, rk[i], use[i]);
	st = -1;
	FOE(i,1,m) if (use[i] && (st == -1 || rk[i] < rk[st])) st = i;
	FOE(i,1,m) v[i] = 0;
	
	q[0] = st;
	t = 1;
	while (1){
		++ITR;
		nxt = -1;
		Flood(st);
		if (nxt == -1) break;
		q[t++] = nxt;
		st = nxt;
	}
	
	int solsz = 0;
	FOR(i,0,t){
		int x = q[i];
		FOR(j,0,List[x].size()) sol[solsz++] = List[x][j];
	}
	if (solsz < nq) goto FAIL;
	FOR(i,0,solsz) printf("%d%c", sol[i] + 1, i == solsz-1 ? '\n' : ' ');
	return;
	FAIL:
	puts("-1");
}

int main(){
	int tc;
	scanf("%d", &tc);
	while (tc--) solve();
	return 0;
}