#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
#define in cin
#define out cout
using namespace std;
typedef long long ll;
const int Nmax = 100001;
vector<int> G[Nmax],Gt[Nmax],Comp[Nmax];
vector<int> CG[Nmax],CGt[Nmax];
int imp[Nmax],impc[Nmax],f[Nmax],m[Nmax];
int X[2*Nmax],Y[2*Nmax],pof[Nmax];
int Tt[Nmax],Kh[Nmax];
int T,N,M,K,kk;
queue<int> q;
void dfs1(int x){
    m[x]=1;
    for(vector<int>::iterator it=G[x].begin();it!=G[x].end();++it) if(!m[*it]) dfs1(*it);
    f[++f[0]]=x;
}
void dfs2(int x,int k){
    Comp[k].push_back(x);
    m[x]=1,pof[x]=k;
    for(vector<int>::iterator it=Gt[x].begin();it!=Gt[x].end();++it) if(!m[*it]) dfs2(*it,k);
}
void dfs3(int x){
    m[x]=1;
    for(vector<int>::iterator it=CG[x].begin();it!=CG[x].end();++it) if(!m[*it]) dfs3(*it);
}
void res(){
    for(int i=1;i<=N;i++){
        G[i].clear(),Gt[i].clear(),CG[i].clear(),CGt[i].clear(),Comp[i].clear();
        Tt[i]=Kh[i]=imp[i]=impc[i]=m[i]=pof[i]=f[i]=0;
    }
    Kh[0]=kk=f[0]=0;
}
int main(){
    in>>T;
    while(T--){
        in>>N>>M>>K;
        res();
        int x,y;
        for(int i=1;i<=K;i++) in>>x,imp[x]=1;
        for(int i=1;i<=M;i++){
            in>>x>>y;
            X[i]=x,Y[i]=y;
            G[x].push_back(y);
            Gt[y].push_back(x);
        }
        for(int i=1;i<=N;i++) if(!m[i]) dfs1(i);
        for(int i=1;i<=N;i++) m[i]=0;
        for(int i=N;i>=1;i--) if(!m[f[i]]) dfs2(f[i],++kk);
        for(int i=1;i<=kk;i++){
            for(vector<int>::iterator it=Comp[i].begin();it!=Comp[i].end();++it){
                if(imp[*it]) impc[i]=1;
            }
        }
        for(int i=1;i<=M;i++){
            x=X[i],y=Y[i];
            if(pof[x]!=pof[y]){
                CG[pof[x]].push_back(pof[y]);
                CGt[pof[y]].push_back(pof[x]);
            }
        }
        for(int i=1;i<=kk;i++){
            sort(CG[i].begin(),CG[i].end());
            vector<int>::iterator itt = unique(CG[i].begin(),CG[i].end());
            CG[i].resize(distance(CG[i].begin(),itt));

            sort(CGt[i].begin(),CGt[i].end());
                                  itt = unique(CGt[i].begin(),CGt[i].end());
            CGt[i].resize(distance(CGt[i].begin(),itt));

            Tt[i]=CG[i].size();
        }
        for(int i=1;i<=kk;i++) if(!Tt[i]) q.push(i);
        while(!q.empty()){
            x=q.front(); q.pop();
            if(impc[x]) Kh[++Kh[0]]=x;
            for(vector<int>::iterator it=CGt[x].begin();it!=CGt[x].end();++it){
                Tt[*it]--; if(!Tt[*it]) q.push(*it);
            }
        }
        for(int i=1;i<=kk;i++){
            m[i]=0;
            sort(Comp[i].begin(),Comp[i].end());
        }
        int ok=1;
        for(int i=2;i<=Kh[0];i++){
            m[Kh[i-1]]=0;
            dfs3(Kh[i]);
            if(!m[Kh[i-1]]) ok=0;
        }
        if(!ok) out<<"-1\n";
        else{
            for(int i=Kh[0];i>=1;i--){
                for(vector<int>::iterator it=Comp[Kh[i]].begin();it!=Comp[Kh[i]].end();++it){
                    if(imp[*it]) out<<*it<<' ';
                }
            }
            out<<'\n';
        }
    }
    return 0;
}