#include<bits/stdc++.h> using namespace std; typedef long long int uli; const int mx=1e5+10; const int mxm=2e5+10; vector<int>g[mx],dag[mx]; int cmp[mx], ncc = 0; stack<int> st; bool instack[mx]; int color[mx],idx[mx],low[mx],t=0; bool good[mx]; vector<int>goods[mx]; int f[mx]; void dfs(int u){ color[u] = 1; idx[u] = low[u] = t++; st.push(u); instack[u]=true; for(int i=0;i<int(g[u].size());i++){ int v = g[u][i]; if(color[v]==0){ dfs(v); low[u]=min(low[u],low[v]); } if(instack[v]){ low[u] = min(low[u],idx[v]); } } if(idx[u]==low[u]){ int v; do{ v = st.top(); if(good[v]){ goods[ncc].push_back(v); } cmp[v] = ncc; instack[v]=false; st.pop(); } while(v!=u); sort(goods[ncc].begin(),goods[ncc].end()); ncc++; } color[u] = 2; } int us[mxm],vs[mxm]; int solve(int u){ if(color[u]==1)return f[u]; f[u]=0; for(int i=0;i<int(dag[u].size());i++){ int v=dag[u][i]; int q=solve(v); f[u]=max(f[u],q); } f[u]+=goods[u].size(); color[u]=1; return f[u]; } int main(){ int tt,n,m,k,u,v; scanf("%d",&tt); while(tt--){ scanf("%d %d %d",&n,&m,&k); for(int i=0;i<n;i++){ g[i].clear(); dag[i].clear(); good[i]=false; goods[i].clear(); } for(int i=0;i<k;i++){ scanf("%d",&u); u--; good[u]=true; } for(int i=0;i<m;i++){ scanf("%d %d",us+i,vs+i); us[i]--,vs[i]--; g[us[i]].push_back(vs[i]); } t=0,ncc=0; memset(color,0,sizeof color); for(u=0;u<n;u++) if(color[u]==0)dfs(u); for(int i=0;i<m;i++){ u=us[i],v=vs[i]; if(cmp[u]!=cmp[v]){ dag[cmp[u]].push_back(cmp[v]); } } for(int i=0;i<ncc;i++){ sort(dag[i].begin(),dag[i].end()); int cnt=unique(dag[i].begin(),dag[i].end())-dag[i].begin(); dag[i].resize(cnt); } memset(color,0,sizeof color); for(int i=0;i<ncc;i++){ solve(i); } int u=-1; for(int i=0;i<n;i++) if(f[i]==k)u=i; if(u==-1){ puts("-1"); continue; } int rem=k; int cnt=0; while(rem>0){ for(int i=0;i<int(goods[u].size());i++){ if(cnt!=0)printf(" "); printf("%d",goods[u][i]+1); cnt++; } rem-=int(goods[u].size()); for(int i=0;i<int(dag[u].size());i++){ int v=dag[u][i]; if(f[v]==rem){ u=v; break; } } } printf("\n"); } return 0; }