#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#include <deque>
#include <cstring>
#include <functional>
#include <climits>
#include <list>
#include <ctime>
#include <complex>
 
#define F1(x,y,z) for(int x=y;x<z;x++)
#define F2(x,y,z) for(int x=y;x<=z;x++)
#define F3(x,y,z) for(int x=y;x>z;x--)
#define F4(x,y,z) for(int x=y;x>=z;x--)
#define pb push_back
#define LL long long
#define co complex<double>
 
#define MAX 100005
#define AMAX 16384
#define MOD 1000000007

#define f(c,d) ((1<<(c))*(d))

using namespace std;

int t,n,m,k,ta,tb;
bool ne[MAX],ng[MAX],v[MAX];
int gp[MAX],gi;
vector<int> va[MAX],vb[MAX],vc[MAX],gg[MAX];
int in[MAX];
stack<int> x;
queue<int> y;
bool ok;
vector<int> ans;

void dfs1(int a){
	v[a]=1;
	F1(b,0,va[a].size())if(!v[va[a][b]])dfs1(va[a][b]);
	x.push(a);
}

void dfs2(int a){
	//printf("%d -> %d\n",a,gi);
	gp[a]=gi;
	gg[gi].pb(a);
	F1(b,0,vb[a].size())if(gp[vb[a][b]]==-1)dfs2(vb[a][b]);
}

void cl(int a){
//	printf("cl %d\n",a);
	F1(b,0,vc[a].size()){
		in[vc[a][b]]--;
		if(in[vc[a][b]]==0){
			//printf("cl %d %d\n",a,vc[a][b]);
			if(ng[vc[a][b]])y.push(vc[a][b]);
			else cl(vc[a][b]);
		}
	}
}

int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&n,&m,&k);
		F2(a,1,n){
			va[a].clear();
			vb[a].clear();
			ne[a]=0;
			v[a]=0;
			gp[a]=-1;
		}
		gi=0;
		while(k--){
			scanf("%d",&ta);
			ne[ta]=1;
		}
		while(m--){
			scanf("%d%d",&ta,&tb);
			va[ta].pb(tb);
			vb[tb].pb(ta);
		}
		F2(a,1,n)if(!v[a])dfs1(a);
		while(!x.empty()){
			if(gp[x.top()]==-1){
				gg[gi].clear();
				dfs2(x.top());
				gi++;
			}
			x.pop();
		}
		F1(a,0,gi){
			vc[a].clear();
			//vd[a].clear();
			in[a]=0;
			v[a]=0;
			ng[a]=0;
			F1(b,0,gg[a].size())if(ne[gg[a][b]])ng[a]=1;
		}
		ok=1;
		ans.clear();
		F2(a,1,n)F1(b,0,va[a].size())if(gp[a]!=gp[va[a][b]]){
			vc[gp[a]].pb(gp[va[a][b]]);
			in[gp[va[a][b]]]++;
			//printf("%d -- %d %d\n",gp[a],gp[va[a][b]],in[1]);
		}
		//F1(a,0,gi)printf("! %d %d\n",a,in[a]);
		F1(a,0,gi)if(in[a]==0){
			if(ng[a]){
				//printf("p %d %d\n",a,in[1]);
				y.push(a);
			}
			else x.push(a);
		}
		while(!x.empty()){
			cl(x.top());
			x.pop();
		}
		while(!y.empty()){
			if(y.size()>1)ok=0;
			int a=y.front();
			//printf("aa %d\n",a);
			ta=ans.size();
			F1(b,0,gg[a].size())if(ne[gg[a][b]]){
				//printf("    %d\n",gg[a][b]);
				ans.pb(gg[a][b]);
			}
			sort(ans.begin()+ta,ans.end());
			cl(a);
			y.pop();
		}
		//printf("ok %d\n",ans.size());
		if(ok){
			F1(a,0,ans.size())printf("%d%c",ans[a],a==ans.size()-1?'\n':' ');
		}else printf("-1\n");
	}
	//system("pause");
	return 0;
}