#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <stack>
#include <vector>
#define f first
#define s second
using namespace std;
bool a[100005] ;
vector<int>v[100005] ;
vector<int>u[100005] ;
vector<int>vv[100005] ;
vector<int>vr[100005] ;
vector<int>com[100005] ;
bool vis[100005] ;
stack<int>st ;
int counter ;
int ind ;
int parent[100005] , s[100005] ;
stack<int>ans;
void dfs1(int x){
    vis[x] = true ;
    for(int i = 0 ;i < v[x].size() ; i++){
        if(!vis[v[x][i]])dfs1(v[x][i]) ;
    }
    st.push(x) ;
}
void dfs2(int x){
    vis[x] = true ;
    for(int i = 0 ; i < u[x].size() ; i++){
        if(!vis[u[x][i]])dfs2(u[x][i]) ;
    }
    parent[x] = ind ;
    if(a[x])com[ind].push_back(x);
}
void dfs3(int x){
    vis[x] = true ;
    for(int i = 0 ;i < v[x].size() ; i++){
        int y = v[x][i] ;
        int l = parent[x] , r = parent[y] ;
        if(l == r)continue ;
        vv[l].push_back(r) ;
        if(!vis[y])dfs3(y) ;
    }
}
int z = 0;
int dfs4(int x){
    int &ret = s[x] ;
    if(vis[x])return s[x] ;
    vis[x] = true ;
    ret = 0 ;
    for(int i=0;i<vv[x].size();i++){
        if(i > 0 && vv[x][i] == vv[x][i-1])continue ;
        ret = max(ret,dfs4(vv[x][i]));
    }
    ans.push(x) ;
    ret += com[x].size() ;
    return ret ;
}
void dfs(int x){
    vis[x] = true ;
    for(int i = 0 ; i < com[x].size() ; i++)cout << com[x][i] << " " ;
    int l = com[x].size() ;
    for(int i = 0 ; i < vv[x].size() ; i++){
        if(!vis[vv[x][i]] && s[vv[x][i]] == s[x] - l){
            dfs(vv[x][i]) ;
            break ;
        }
    }
}
int main(){
    int t ;scanf("%d",&t) ;
    int n , m , k ;
    for(int I = 1 ; I <= t ; I++){
        scanf("%d%d%d",&n,&m,&k) ;
        for(int i = 1 ;i <= n ; i++){
            v[i].clear() ;
            vv[i].clear() ;
            u[i].clear() ;
            com[i].clear() ;
            a[i] = false ;
            s[i] = 0 ;
        }
        for(int i = 1 ; i <= k ; i++){
            int x ;scanf("%d",&x) ;
            a[x] = true ;
        }
        memset(vis,0,sizeof(vis)) ;
        for(int i = 0 ;i < m ; i++){
            int x , y ;
            scanf("%d%d",&x,&y) ;
            v[x].push_back(y) ;
            u[y].push_back(x) ;
        }
        for(int i = 1 ; i <= n ; i++){
            if(!vis[i]){
                dfs1(i) ;
            }
        }
        memset(vis,0,sizeof(vis)) ;
        for(int i = 1 ;i <= n ; i++)parent[i] = i ;
        ind = 0 ;
        counter = 0 ;
        while(!st.empty()){
            int x = st.top() ;st.pop() ;
            if(!vis[x]){
                ind ++ ;
                dfs2(x) ;
                sort(com[ind].begin(),com[ind].end()) ;
            }
        }
        memset(vis,0,sizeof(vis)) ;
        bool flag = false ;
        for(int i = 1 ; i <= n ; i++){
            if(!vis[i]){
                dfs3(i) ;
            }
        }
        memset(vis,0,sizeof(vis)) ;
        z = 0 ;
        for(int i = 1 ; i <= n ; i++){
            sort(vv[i].begin(),vv[i].end()) ;
        }
        int start = 0 ;
        for(int i=1;i<=ind;i++){

            if(!vis[i]){
                z ++ ;
                int c = dfs4(i);
                if(c == k){
                    flag = true ;
                    start = i ;
                }
            }
        }
        if(!flag){
            printf("-1\n") ;
            continue ;
        }
        memset(vis,0,sizeof(vis)) ;
        dfs(start) ;
        printf("\n");
    }
    return 0 ;
}