#include <bits/stdc++.h> using namespace std; int t; int n; int m; int k; int p1, p2; vector <int> graf[100007]; vector <int> farg[100007]; int chce[100007]; vector <int> wyn; int post[100007]; int bylo[100007]; int spo[100007]; int ok[100007]; int l; vector <int> grafs[100007]; int in[100007]; vector <int> ktore[100007]; int wrzu; vector <int> roz; int czy; int u; void dfs(int v) { bylo[v]=1; for (int i=0; i<farg[v].size(); i++) { if (!bylo[farg[v][i]]) { dfs(farg[v][i]); } } l++; post[l]=v; } void dfs2(int v) { spo[v]=l; for (int i=0; i<graf[v].size(); i++) { if (!spo[graf[v][i]]) { dfs2(graf[v][i]); } } } int main() { scanf("%d", &t); while(t--) { scanf("%d%d%d", &n, &m, &k); for (int i=1; i<=n; i++) { chce[i]=0; graf[i].clear(); farg[i].clear(); bylo[i]=0; post[i]=0; spo[i]=0; in[i]=0; grafs[i].clear(); ktore[i].clear(); ok[i]=0; } roz.clear(); wyn.clear(); wrzu=0; l=0; czy=1; for (int i=1; i<=k; i++) { scanf("%d", &p1); chce[p1]=1; } for (int i=1; i<=m; i++) { scanf("%d%d", &p1, &p2); graf[p1].push_back(p2); farg[p2].push_back(p1); } for (int i=1; i<=n; i++) { if (!bylo[i]) { dfs(i); } } l=0; for (int i=n; i; i--) { if (!spo[post[i]]) { l++; dfs2(post[i]); } } for (int i=1; i<=n; i++) { if (chce[i]) { ktore[spo[i]].push_back(i); } for (int j=0; j<graf[i].size(); j++) { if (spo[i]!=spo[graf[i][j]]) { grafs[spo[i]].push_back(spo[graf[i][j]]); in[spo[graf[i][j]]]++; } } } for (int i=1; i<=l; i++) { sort(ktore[i].begin(), ktore[i].end()); if (!ktore[i].empty()) ok[i]=ktore[i][0]; if (!in[i]) { roz.push_back(i); if (ok[i]) { wrzu++; } } } while(!roz.empty()) { if (wrzu>1) { czy=0; break; } u=roz.back(); roz.pop_back(); if (ok[u]) { wrzu--; for (int i=0; i<ktore[u].size(); i++) { wyn.push_back(ktore[u][i]); } } for (int i=0; i<grafs[u].size(); i++) { in[grafs[u][i]]--; if (!in[grafs[u][i]]) { roz.push_back(grafs[u][i]); if (ok[grafs[u][i]]) { wrzu++; } } } } if (!czy) printf("-1\n"); else { for (int i=0; i<wyn.size(); i++) printf("%d ", wyn[i]); printf("\n"); } } return 0; }