#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define ft first
#define sd second
#define mem(a,v) memset(a,v,sizeof(a))
typedef long long int ll;
typedef pair<int, int> PII;

vector<vector<int> > adj(100100), cmpt(100100), scc(100100);
bool visited[100100];
int toVisit[100100];
int node[100100];
stack<int> S;

void dfs(int u)
{
	visited[u] = true;
	for(int i=0; i<adj[u].size(); i++){
		if(!visited[adj[u][i]]){
			dfs(adj[u][i]);
		}
	}
	S.push(u);
}

void SCC(int u, int cnt)
{
	visited[u] = true;
	scc[cnt].pb(u);
	node[u] = cnt;
	for(int i=0; i<cmpt[u].size(); i++){
		if(!visited[cmpt[u][i]]){
			SCC(cmpt[u][i], cnt);
		}
	}
}

int visCount;

void check(int u)
{
    visited[u] = true;
    if(toVisit[u] == 2)
        visCount++;
    for(int i=0; i<adj[u].size(); i++){
        if(!visited[adj[u][i]])
            check(adj[u][i]);
    }
}

bool go(int u, int v)
{
    if(u == v){
       // cout<<"here\n";
        return true;
    }
    visited[u] = true;
    bool ret = false;
    for(int i=0; i<adj[u].size(); i++){
        if(!visited[adj[u][i]])
            ret |= go(adj[u][i], v);
    }
    //visited[u] = false;
    return ret;
}

int main()
{
    int t;
    cin>>t;
    while(t--){
        int n, m, k;
        cin>>n>>m>>k;
        mem(toVisit, 0);
        for(int i=1; i<=k; i++){
            int x;
            scanf("%d", &x);
            toVisit[x] = 1;
        }
        for(int i=1; i<=n; i++){
            adj[i].clear();
            cmpt[i].clear();
            scc[i].clear();
        }
        for(int i=1; i<=m; i++){
            int x, y;
            scanf("%d %d", &x, &y);
            if(x == y)
                continue;
            adj[x].pb(y);
            cmpt[y].pb(x);
        }
        mem(visited, false);
		for(int i=1; i<=n; i++){
			if(!visited[i])
				dfs(i);
		}

		mem(visited, false);
		int cnt = 1;
		vector<int> topo;
		while(!S.empty()){
            int nxt = S.top();
            S.pop();
            topo.pb(nxt);
            if(!visited[nxt]){
                SCC(nxt, cnt);
                cnt++;
            }
		}

		for(int i=1; i<cnt; i++){
            sort(scc[i].begin(), scc[i].end());
		}

        vector<int> res;

		for(int i=0; i<topo.size(); i++){
            int nd = topo[i];
            if(toVisit[nd] == 1){
                int Node = node[nd];
                for(int j=0; j<scc[Node].size(); j++){
                    int nd1 = scc[Node][j];
                    if(toVisit[nd1] == 1){
                        res.pb(nd1);
                        toVisit[nd1] = 2;
                    }
                }
            }
		}
        assert(res.size() == k);
		mem(visited, false);
		visCount = 0;
		check(res[0]);
		if(visCount != k){
            cout<<"-1\n";
		}
		else{
            if(k <= 10000){
                mem(visited, false);
                bool flag = true;
                for(int i=0; i<res.size()-1; i++){
                    /*if(start[res[i]] < start[res[i+1]] && finish[res[i]] > finish[res[i+1]])
                        ;
                    else{
                        flag = true;
                    }*/
                    mem(visited, false);
                    flag &= go(res[i], res[i+1]);
                    //cout<<flag<<"\n";
                }
                if(!flag){
                    cout<<"-1\n";
                }
                else{
                    for(int i=0; i<res.size(); i++){
                        cout<<res[i]<<" ";
                    }
                    cout<<"\n";
                }
            }
            else{
                for(int i=0; i<res.size(); i++){
                    cout<<res[i]<<" ";
                }
                cout<<"\n";
            }
             
		}
    }
    return 0;
}