#include<bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define MOD 1000000007
#define ZERO 1e-9
using namespace std;
typedef vector<int> vi;
vi dfs_num, dfs_low, s, visited;
int dfsNumberCounter, numSCC;
vector<vector<int> > g, adj;
int scc[100100];
void tarjanSCC(int u) {
	dfs_low[u] = dfs_num[u] = dfsNumberCounter++, s.push_back(u), visited[u] = 1;
	for (int j = 0; j < (int) adj[u].size(); j++) {
		int v = adj[u][j];
		if (dfs_num[v] == false)
			tarjanSCC(v);
		if (visited[v])
			dfs_low[u] = min(dfs_low[u], dfs_low[v]);
	}
	if (dfs_low[u] == dfs_num[u]) {
		vector<int> x;
		while (1) {
			int v = s.back();
			s.pop_back(), visited[v] = 0, x.pb(v), scc[v] = numSCC;
			if (u == v)
				break;
		}
		g.pb(x);
		++numSCC;
	}
}
vector<vector<int>> content;
vector<unordered_set<int>> gc;
vector<int> order;
int n, m, k, a, b;

void buildGraph() {
	content.resize(g.size());
	gc.resize(g.size());

	for (int i = 0; i < k; i++) {
		content[scc[order[i]]].push_back(order[i]);
	}
	int from, to;
	for (int i = 1; i <= n; i++) {
		from = scc[i];
		for (int j = 0; j < (int)adj[i].size(); j++) {
			to = scc[adj[i][j]];
			gc[from].insert(to);
		}
	}
}

int nt[100100], sum[100100];

int bfs(int node) {


	if (sum[node] != -1)
		return sum[node];

	int ans = content[node].size();
	int s = content[node].size();
	for (unordered_set<int>::iterator it = gc[node].begin();
			it != gc[node].end(); it++) {

		if(node != *it) {
			if (ans < bfs(*it) + s) {
				ans = bfs(*it) + s;
				nt[node] = *it;
			}
		}
	}

	return sum[node] = ans;
}

ostringstream foo;

void solve() {
	dfs_num.clear();
	dfs_low.clear();
	visited.clear();
	adj.clear();
	gc.clear();
	content.clear();
	order.clear();

	dfs_num.assign(100100, false);
	dfs_low.assign(100100, 0);
	visited.assign(100100, 0);
	dfsNumberCounter = numSCC = 0;
	adj.resize(100100);


	cin >> n >> m >> k;
	for (int i = 0; i < k; i++)
		cin >> a, order.pb(a);
	for (int i = 0; i < m; i++)
		cin >> a >> b, adj[a].pb(b);

	for (int i = 1; i <= n; i++)
		if (dfs_num[i] == false)
			tarjanSCC(i);




	buildGraph();


	memset(nt, -1, sizeof nt);
	memset(sum, -1, sizeof sum);
	int max = 0;
	int indx = -1;
	for (int i = 0; i < (int)g.size() && max != k; i++) {
		if (max < bfs(i)) {
			max = bfs(i);
			indx = i;
		}
	}





	if (max != k) {
		foo  << "-1\n";
	}
	else {
		int cc = 0;
		while (indx != -1) {
			sort(content[indx].begin(), content[indx].end());
			cc += content[indx].size();
			for(int i = 0;i < (int)content[indx].size(); i++) {
				foo<<content[indx][i]<<" ";
			}
			indx = nt[indx];
		}
		foo << endl;
	}
}

int main(int argc, char **argv) {
//	freopen("input.txt", "r", stdin);
	int t;
	cin>>t;
	while(t--) {
		solve();
	}
	cout<<foo.str();

	return 0;
}