#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;
}