/****                                          Far from what I once was,
                                               But not yet what I'm going to be                                                      ****/


/******** HEADER FILES  ********/

#include <bits/stdc++.h>



/******** MACRO *******/


#define il(n)                   scanf("%lld",&n)
#define i(n)                    scanf("%d",&n)
#define vv                      vector<int>
#define ll                      long long
#define dd                      double
#define pp                      pair<int,int>
#define mod                     1000000007

#define read() freopen("input.txt","r",stdin)
#define write() freopen("output.txt","w",stdout)

using namespace std;



/***** NODE ******/


struct node
{
    int a,b,c,d,e;

};




/********  predefined sorting functions *************/


bool cmp(node first,node sec)
{
    if(first.b!=sec.b)
    return first.b<sec.b;
                                                /// sort in ascending order

    return first.a<sec.a ;                     /// if first same than in ascending order of second
}


bool operator <(node left,node right)
{
    if(left.a!=right.a)
    return left.a<right.a;

    return left.b<right.b;   ///  use of > operator sorts in ascending order

}


/*********  Happy Coding :)  **********

**********  Main Code   ***************/


vector<int> v[100005],vt[100005],s,cscc,main_vector,z;

int c[100005],flag,nflag,target,scc;

int dfs_t(int x)
{

    int i;

    /// creating stack for scc

    for(i=0;i<vt[x].size();i++)
    {
        if(c[vt[x][i]]==0)
        {
            c[vt[x][i]]=1;
            dfs_t(vt[x][i]);
        }
    }

    s.push_back(x);
    return 0;
}

int dfs(int x)
{
    cscc.push_back(x);
    int i;

    for(i=0;i<v[x].size();i++)
    {
        if(c[v[x][i]]==0)
        {
            c[v[x][i]]=scc;
            dfs(v[x][i]);
        }
        else if(c[v[x][i]]==target)
        flag=1;
    }

    return 0;

}

int n,m,k,mark[100005],a,b;

int main()
{

  int tc;

  cin>>tc;

  while(tc--)
  {


   int i,j,x;

   cin>>n>>m>>k;


   /// initialization

   for(i=0;i<=100002;i++)
   {
       v[i].clear();
       vt[i].clear();
       c[i]=0;
       mark[i]=0;
   }

   main_vector.clear();
   s.clear();


   for(i=1;i<=k;i++)
   {
       /// Station

       cin>>x;
       mark[x]=1;
   }

   for(i=1;i<=m;i++)
   {
       cin>>a>>b;

       /// graph
       v[a].push_back(b);

       /// transpose graph
       vt[b].push_back(a);

   }

   for(i=1;i<=n;i++)
   {
       if(c[i]==0)
       {
           c[i]=1;
           dfs_t(i);
       }
   }

   /// target to be visit
   target=0;

   int finalanswer=0;

   for(i=1;i<=n;i++)
   c[i]=0;

   scc=0;

   for(i=n-1;i>=0;i--)
   {
       if(c[s[i]]==0)
       {

          cscc.clear();
          flag=0;
          c[s[i]]=++scc;
          dfs(s[i]);

          nflag=0;

          for(j=0;j<cscc.size();j++)
          {
            if(mark[cscc[j]]==1)
            nflag=1;
          }


          z.clear();

          if((target==0)&&(nflag==1))
          {
            target=scc;
            for(j=0;j<cscc.size();j++)
            {
                if(mark[cscc[j]]==1)
                z.push_back(cscc[j]);
            }

            sort(z.begin(),z.end());

            for(j=z.size()-1;j>=0;j--)
            main_vector.push_back(z[j]);


          }
          else if((flag==1)&&(target!=0)&&(nflag==0))
          {
            for(j=0;j<cscc.size();j++)
            c[cscc[j]]=target;
          }
          else if((flag==1)&&(target!=0)&&(nflag==1))
          {
              target=scc;
              for(j=0;j<cscc.size();j++)
              {
                if(mark[cscc[j]]==1)
                z.push_back(cscc[j]);

              }

              sort(z.begin(),z.end());

              for(j=z.size()-1;j>=0;j--)
              main_vector.push_back(z[j]);

          }
          else if((flag==0)&&(target!=0)&&(nflag==1))
          finalanswer=-1;

       }
   }

   if((finalanswer!=1)&&(main_vector.size()==k))
   {
       for(i=main_vector.size()-1;i>=0;i--)
       cout<<main_vector[i]<<" ";
   }
   else
   cout<<"-1";

   cout<<"\n";

  }

   return 0;
}
/**
10
4 5 3
4 3 2
3 4
3 1
1 4
2 1
3 2
7 5 4
1 5 6 7
1 7
1 5
5 6
7 5
6 7

*/