#include <bits/stdc++.h>
using namespace std;
const int maxn=  100010 ; 
vector<int> scc[maxn] ;
vector<int> order ;
bool vis[maxn] ;
bool is[maxn]; 
int indeg[maxn];
int dp[maxn];
set<int> good_scc[maxn],G[maxn];
vector<int> rg[maxn],g[maxn];
int rm[maxn],lo[maxn],comp[maxn];
void dfs1(int node){
    vis[node] = true ; 
    for(int i = 0 ; i < g[node].size() ; ++i){
        if(!vis[g[node][i]]){
            dfs1(g[node][i]) ; 
        }
    }
    order.push_back(node) ; 
}
void dfs2(int node, int id){
    vis[node] = false;  
    scc[id].push_back(node) ;
    if(is[node]){
        good_scc[id].insert(node) ; 
    } 
    for(int i = 0 ;  i < rg[node].size() ; ++i){
        if(vis[rg[node][i]]){
            dfs2(rg[node][i],id) ;
        }
    }
}
priority_queue<int> pq;
int main(){
   // freopen("input.txt","r",stdin) ;
    ios_base::sync_with_stdio(0) ;
    cin.tie(0) ; 
    int tc;
    cin >> tc;
    while(tc--){
        int n ,m,k; 
        cin >> n >> m >> k ; 
        for(int i = 0 ; i < k  ; ++i){
            int x ;
            cin>>x; 
            is[x]= true ; 
        }
        for(int i = 0 ; i < m ; ++i){
            int u , v; 
            cin >> u >> v; 
            g[u].push_back(v) ; 
            rg[v].push_back(u) ; 
        }
        for(int i = 1; i <= n ;++i){
            if(!vis[i]){
                dfs1(i) ; 
            }
        }
        int id = 0 ; 
        for(int i = (int)order.size() - 1; i >= 0 ; --i){
            if(vis[order[i]]){
                dfs2(order[i],++id);
            }
        }   
        // for(int i = 1; i <= id ; ++i){
        //     cout << "number " << i << "\n" ;
        //     for(int j = 0 ; j < scc[i].size() ; ++j){
        //         cout << scc[i][j] << " " ; 
        //     }
        //     cout << "\n" ; 
        //}
        for(int i = 1; i  <= id ; ++i){
            //lo[i]= *min_element(scc[i].begin() , scc[i].end()) ;
            int val ; 
            if(good_scc[i].size() == 0){
                val = *min_element(scc[i].begin() , scc[i].end()) ; 
            }
            else
                val = *min_element(good_scc[i].begin() , good_scc[i].end()) ;

            rm[val] = i ;  
            for(int j = 0 ; j < scc[i].size() ; ++j){
                lo[scc[i][j]] =  val ; 
            }
            comp[val] = true ;  
        }

        for(int i = 1;  i<= n; ++i){
            
            for(int j = 0  ;j < g[i].size() ; ++j){
                if(lo[i] !=lo[g[i][j]] && G[lo[i]].find(lo[g[i][j]]) == G[lo[i]].end()){
                    //cout << lo[i] << " " << lo[g[i][j]] << "\n" ; 
                    G[lo[i]].insert(lo[g[i][j]]) ; 
                    ++indeg[lo[g[i][j]]];  
                }
            }
        }
        for(int i = 1 ; i <= n ;++i){
            if((comp[i]) and  (indeg[i] == 0)){
                pq.push(i) ; 
            }
        }
        order.clear() ; 
        while(!pq.empty()){
            int cur = pq.top() ;  
            pq.pop() ;
          //  cout<<cur<<endl;
            assert(indeg[cur] == 0); 
            order.push_back(cur) ;
            for(set<int>::iterator itr = G[cur].begin() ; itr != G[cur].end() ; ++itr){
             //   cout << cur <<  " " << *itr << "\n" ; 
                indeg[*itr]--;
              //  cout << indeg[*itr] << "\n" ; 
                assert(comp[*itr]);
                assert(indeg[*itr] >=0);
                if(indeg[*itr] == 0){
                    pq.push(*itr) ; 
                }
            }
        }

        for(int i = 1 ; i <= n ;++i){
            if(comp[i]) {
                assert(indeg[i]==0) ; 
            }
        }
        for(int j = (int)order.size() - 1;  j >= 0 ; --j){
            int u = order[j] ;
            int z = u ; 
            u = rm[u] ;  
            dp[z] = good_scc[u].size();
            for(set<int>::iterator itr = G[z].begin() ; itr != G[z].end() ; ++itr){
                dp[z] = max(dp[z] , (int)good_scc[u].size() + dp[*itr] ); 
            }

        }

        for(int i = 0 ; i < order.size() ; ++i){
            int u = order[i] ; 
            u = rm[u];
            if(good_scc[u].size() > 0){
                int z = order[i] ;
                if(dp[z] != k){
                    cout << -1  ; 
                    goto done;
                }
                break;
            }
        }

        for(int i = 0 ; i < order.size() ; ++i){
            int u = order[i] ; 
            u = rm[u] ;
            for(set<int>::iterator itr = good_scc[u].begin() ; itr != good_scc[u].end() ; ++itr){
                cout << (*itr) << " "  ; 
            }
        }
        done: ;
        
//         vector<int> scc[maxn] ;
// vector<int> order ;
// bool vis[maxn] ;
// bool is[maxn]; 
// int indeg[maxn];
// int dp[maxn];
// set<int> good_scc[maxn],G[maxn];
// vector<int> rg[maxn],g[maxn];
// int rm[maxn],lo[maxn],comp[maxn];
        order.clear() ; 
        for(int i = 1; i <= n;   ++i){
            vis[i] = false ; 
            g[i].clear() ; 
            rg[i].clear() ; 
            G[i].clear() ; 
            good_scc[i].clear() ; 
            is[i] = false ;
            scc[i].clear();
            comp[i]=false;
        }
        cout << "\n" ; 
    }
    return 0 ; 
}