#include <bits/stdc++.h>
#include <assert.h>
#include <unordered_map>
using namespace std;
 
typedef long long ll;
typedef vector < long long > vll;
typedef pair < long long, long long > pll;
typedef pair < int, int > pii;
typedef vector < int > vii;
 
#define csl ios_base::sync_with_stdio(false); cin.tie(NULL)
#define mp make_pair
#define fst first
#define snd second
#define special 2147483647
 
ll t, n, u, v, m, q, r, ql, qr, k, l, s, x, y, w, h, c, a, b, z, K;
const int N = 2e5 + 500;
const long long mod = 1e9 + 7;
const long long INF = 1LL << 57LL;
const bool JUDGE = false;
vii adj[N], radj[N], comp[N], ad[N];
set < int > Adj[N];
int H = 0, st[N], cnt[N], to[N], ideg[N], Q[N], ans[N];
int vis[N], print[N];
void dfs (int v) {
	if (vis[v]) return;
	vis[v] = true;
	for (int i = 0; i < adj[v].size(); ++i) {
		dfs(adj[v][i]);
	}
	st[H++] = v;
}
void dfs2 (int v) {
	if (vis[v]) return;
	vis[v] = true;
	comp[k].push_back(v);
	to[v] = k;
	for (int i = 0; i < radj[v].size(); ++i) {
		dfs2(radj[v][i]);
	}
}
int main(){
	csl;
	cin >> t;
	while (t--) {
		k = -1;
		cin >> n >> m >> K;
		for (int i = 0; i <= n; ++i) print[i] = 0;
		for (int i = 0; i < K; ++i) {
			cin >> x;
			print[x] = true;
		}
		for (int i = 0; i <= n; ++i) {
			adj[i].clear();
			radj[i].clear();
			ad[i].clear();
			Adj[i].clear();
			vis[i] = 0;
			comp[i].clear();
			H = 0;
			cnt[i] = 0;
			ans[i] = 0;
			ideg[i] = 0;
		}
		for (int i = 0; i < m; ++i) {
			cin >> u >> v;
			adj[u].push_back(v);
			radj[v].push_back(u);
		}
		for (int i = 1; i <= n; ++i) {
			if (vis[i]) continue;
			dfs(i);
		}
		for (int i = 0; i <= n; ++i) vis[i] = false;
		for (int i = H - 1; i >= 0; --i) {
			if (vis[st[i]]) continue;
			k++;
			dfs2(st[i]);
			sort(comp[k].begin(), comp[k].end());
		}
		for (int i = 0; i <= k; ++i) {
			for (int j = 0; j < comp[i].size(); ++j) {
				cnt[i] += print[comp[i][j]];
				for (int l = 0; l < adj[comp[i][j]].size(); ++l) {
                    if (to[adj[comp[i][j]][l]] != i)
					   Adj[i].insert(to[adj[comp[i][j]][l]]);
				}
			}
		}
		for (int i = 0; i <= k; ++i) {
			for (auto j = Adj[i].begin(); j != Adj[i].end(); ++j) {
				ad[i].push_back(*j);
				ideg[*j]++;
			}
		}
		int C = 0;

		for (int i = 0; i <= k; ++i) {
			if (ideg[i] == 0) {
				Q[C++] = i;
			}
		}
		for (int i = 0; i < C; ++i) {
			//cout << Q[i] << " ";
			int x = Q[i];
			for (int j = 0; j < ad[x].size(); ++j) {
				int v = ad[x][j];
				ideg[v]--;
				if (ideg[v] == 0) Q[C++] = v;
			}
		}
		bool valid = false;
		for (int i = C - 1; i >= 0; --i) {
			ans[Q[i]] = 0;
			for (int j = 0; j < ad[Q[i]].size(); ++j) {
				int v = ad[Q[i]][j];
				ans[Q[i]] = max(ans[Q[i]], ans[v]);
			}
			ans[Q[i]] += cnt[Q[i]];
			if (ans[Q[i]] == K) valid = true;
		}
		if (valid) {
			for (int i = 0; i < C; ++i) {
				for (int j = 0; j < comp[Q[i]].size(); ++j) {
					if (print[comp[Q[i]][j]]) cout << comp[Q[i]][j] << " ";
				}
			}
			cout << '\n';
		}
		else {
			cout << -1 << '\n';
		}
	}
	return 0;
}