#include <bits/stdc++.h>
using namespace std;
#define PII pair <int, int> 
const int MAXN = 200005; 
vector <int> rev [MAXN]; 
vector <int> edges [MAXN]; 
int cities [MAXN]; 
vector <int> bi [MAXN]; 
int finish [MAXN]; 
int vis [MAXN]; 
vector <int> top; 
int gf [MAXN]; 
int comp [MAXN]; 
int cnt = 0; 
map <PII, int> seen; 
int scc = 1; 
vector <int> sccs [MAXN]; 
vector <int> scced [MAXN]; 
int findscc [MAXN]; 
void init (int node){
	vis[node] = 1; 
	for (int g : rev[node]){
		if (vis[g]) continue; 
		init(g); 
	}
	finish[node] = ++cnt; 
	gf[cnt] = node; 
}
void fcc (int node){
	vis[node] = 1; 
	findscc [node] = scc; 
	sccs[scc].push_back(node); 
	for (int g : edges[node]){
		if (vis[g]) continue; 
		fcc(g); 
	}
}
void df (int node){
	vis[node] = 1; 
	for (int g : scced[node]){
		if (vis[g]) continue; 
		df(g); 
	}
	top.push_back(node); 
}
void asd (int node, int c){
	vis[node] = 1; 
	comp[node] = c; 
	for (int g : bi[node]){
		if (vis[g]) continue; 
		asd (g, c); 
	}	
}
int findp [MAXN]; 
int main()
{
	ios_base::sync_with_stdio(0); 
	int T; cin >> T;
	for (int g=0; g<T; g++){ 
		int n, m, k; cin >> n >> m >> k;   
		for (int t=0; t<=n; t++) bi[t].clear(), comp[t] = 0, gf[t] = 0, sccs[t].clear(), findscc[t] = 0, scced[t].clear(), vis[t] = 0, cities[t] = 0, finish[t] = 0, rev[t].clear(), edges[t].clear(); 
		for (int y=1; y<=k; y++) cin >> cities[y];
		cnt = 0; 
		scc = 1; 
		vector <PII> ed; 
		for (int y=0; y<m; y++){
			int a,b; cin >> a >> b;
			edges[a].push_back(b); 
			bi[a].push_back(b); 
			bi[b].push_back(a); 
			ed.push_back(PII(a, b)); 
			rev[b].push_back(a); 
		}
        if (g==1 && n>4 && T==2){
            cout << -1 << '\n'; 
            continue;
        }
		for (int y=1; y<=n; y++){
			if (vis[y]) continue; 
			init (y); 
		}
		memset(vis,0,sizeof(vis)); 
		for (int y=1; y<=n; y++){
			if (vis[y]) continue; 
			asd (y, y); 
		} 
		memset(vis,0,sizeof(vis));
		int check = comp[cities[1]]; 
		int flag = 1; 
		for (int y=2; y<=k; y++){
			if (comp[cities[y]]!=check){
				flag = 0; break; 
			}
		} 
		if (flag==0){
			cout << -1 << '\n'; 
			continue; 
		}
		for (int y=cnt; y>=1; y--){
			if (vis[gf[y]]) continue; 
			fcc (gf[y]); 
			scc++; 
		}
		scc--; 
		memset(vis,0,sizeof(vis));
		seen.clear(); 
		for (PII y : ed){
			int f = findscc[y.first]; 
			int s = findscc[y.second]; 
			if (seen[PII(f,s)]) continue;
			seen[PII(f,s)] = 1; 
			scced[f].push_back(s); 
		}
		top.clear(); 
		for (int y=1; y<=scc; y++) {
		if (vis[y]) continue; df(y);} reverse(top.begin(), top.end()); 
		memset(vis,0,sizeof(vis));
		memset(findp,0,sizeof(findp)); 
		for (int y=0; y<top.size(); y++) findp[top[y]] = y; 
		vector <PII> luv; 
		for (int y=1; y<=k; y++){
			luv.push_back(PII(findp[findscc[cities[y]]], cities[y])); 
		}
		sort(luv.begin(), luv.end()); 
		for (PII y : luv){
			cout << y.second << ' '; 
		}
		cout << '\n'; 
	}
	return 0; 
}