#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef vector<int> vi;
typedef pair<int,int> pii;
const int N = 100010;
class node
{
	public :
		vi near;
		vi to;
};
vi scca[N];
node a[N];
node b[N];
bool vis[N]={0};
int nn;
int scc[N];
int fin[N];
bool df[N]={0};
int tim = 1;
vi tmp;
void dfs(int j)
{
	df[j]=1;
	vi v = a[j].near;
	for(int i=0;i<v.size();i++)
	{
		if(!df[v[i]])dfs(v[i]);
	}
	fin[tim]=j;
	tim++;
}

void dfs1(int j)
{
	df[j]=1;
	tmp.push_back(j);
	vi v = a[j].to;
	for(int i=0;i<v.size();i++)
	{
		if(!df[v[i]])dfs1(v[i]);
	}
}
void pre(int n)
{
	for(int i=1;i<=n;i++)
		df[i]=0;
	tim=1;
	for(int i=1;i<=n;i++)
	{
		if(!df[i])dfs(i);
	}
	for(int i=1;i<=n;i++)
	{
		df[i]=0;
	}
	int cmp = 1;
	for(int i=n;i>0;i--)
	{
		int x = fin[i];
		if(df[x])continue;
		tmp.clear();
		dfs1(x);
		for(int j=0;j<tmp.size();j++)
			scc[tmp[j]]=cmp;
		scca[cmp]=tmp;
		cmp++;
	}
	nn=cmp-1;
//	for(int i=1;i<=nn;i++)
//	{
//		tmp = scca[i];
//		for(int j=0;j<tmp.size();j++)
//			cout<<tmp[j]<<" ";
//		cout<<endl;
//	}
}
vector<pii> edges;
vi tsort;
void dfs2(int j)
{
	df[j]=1;
	vi v = b[j].near;
	for(int i=0;i<v.size();i++)
	{
		if(!df[v[i]])dfs2(v[i]);
	}
	tsort.push_back(j);
}

void topsort()
{
	for(int i=1;i<=nn;i++)
		df[i]=0;
	for(int i=1;i<=nn;i++)
	{
		if(!df[i])dfs2(i);
	}
	reverse(tsort.begin(), tsort.end());
//	for(int i=0;i<tsort.size();i++)
//	{
//		cout<<tsort[i]<<" ";
//	}
//	cout<<endl;
}

int lvl[N];
int req[N]={0};
int nxtlvl[N]={0};
bool Check(int j)
{
	if(!req[j])return 1;
	int jlvl = lvl[j];
	if(nxtlvl[jlvl]==0)return 1;
	int k = nxtlvl[jlvl];
	queue<int> q;
	q.push(j);
	df[j]=1;
	while(!q.empty())
	{
		int top = q.front();
		q.pop();
		vi v = b[top].near;
		for(int i=0;i<v.size();i++)
		{
			if(df[v[i]])continue;
			if(lvl[v[i]]>k)continue;
			if(lvl[v[i]]==k)return 1;
			df[v[i]]=1;
			q.push(v[i]);
		}
	}
	return 0;
}
bool check(int n)
{
	for(int i=0;i<nn;i++)
		lvl[tsort[i]]=i;
	nxtlvl[nn-1]=0;
	for(int i=nn-2;i>=0;i--)
	{
		if(req[tsort[i+1]])nxtlvl[i]=i+1;
		else nxtlvl[i]=nxtlvl[i+1];
	}
	for(int i=0;i<=n;i++)
		df[i]=0;
	for(int i=0;i<tsort.size();i++)
	{
		if(!Check(tsort[i]))return 0;	
	}
	return 1;
}
int main()
{
	int test;
	cin>>test;
	for(int z=1;z<=test;z++)
	{
		int n,m,k;
		cin>>n>>m>>k;
		int x;
		for(int i=1;i<=n;i++)
			vis[i]=0;
		for(int i=0;i<=n;i++)
		{
			a[i].near.clear();
			a[i].to.clear();
			b[i].near.clear();
			scca[i].clear();
			df[i]=0;
			edges.clear();
			req[i]=0;
			tsort.clear();
			nxtlvl[i]=0;
			tim=1;
		}
		for(int i=1;i<=k;i++)
		{
			scanf("%d",&x);
			vis[x]=1;
		}
		int y;
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d",&x,&y);
			a[x].near.push_back(y);
			a[y].to.push_back(x);
			edges.push_back(pii(x,y));
		}
		pre(n);
		for(int i=0;i<edges.size();i++)
		{
			x = edges[i].first;
			y = edges[i].second;
			int xx = scc[x], yy = scc[y];
			if(xx!=yy)
			{
				b[xx].near.push_back(yy);
			}
		}
		topsort();
		for(int i=1;i<=n;i++)
		{
			if(vis[i])req[scc[i]]=1;
		}
		if(!check(n))
		{
			cout<<-1<<endl;
			continue;
		}
		for(int i=0;i<tsort.size();i++)
		{
			if(req[tsort[i]])
			{
				tmp = scca[tsort[i]];
				sort(tmp.begin(), tmp.end());
				for(int k=0;k<tmp.size();k++)
					if(vis[tmp[k]])cout<<tmp[k]<<" ";
			}
		}
		cout<<endl;
	}
}