#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef pair<int, int> pii;
vector<vector<int>> adj;
vector<vector<int>> adj2;


bool visited[100005];
vector<int> order;
void dfs(int p){
    visited[p] = true;
    for(int u : adj2[p]){
        if(!visited[u]) dfs(u);
    }
    order.push_back(p);
}
int counter = 0;
int scc[100005];
vector<vector<int>> sccadj;

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    int T; cin >> T;
    for(int tc=0;tc<T;tc++){
        memset(visited, false, sizeof(visited));
        counter = 0;
        order = vector<int>();
        memset(scc, 0, sizeof(scc));
        int N; int M; int K; cin >> N >> M >> K;
        adj = vector<vector<int>>(N+2);
        adj2 = vector<vector<int>>(N + 2);
        sccadj = vector<vector<int>>(N+2);
        vector<int> visits;
        for(int k=0;k<K;k++){
            int t; cin >> t;
            visits.push_back(t);
        }
        for(int m=0;m<M;m++){
            int u; int v;  cin >> u >> v;
            adj[u].push_back(v);
            adj2[v].push_back(u);
        }
        for(int i=1;i<=N;i++){
            if(!visited[i]) dfs(i);
        }
        memset(visited, false, sizeof(visited));
        reverse(order.begin(), order.end());
        for(int v : order){
            //cout << v << "!!\n";
            if(visited[v]) continue;
            counter++;
            vector<int> Q; Q.push_back(v);
            while(!Q.empty()){
                int u = Q.back(); Q.pop_back();
                if(visited[u]){
                    if(scc[u] != counter){
                        sccadj[counter].push_back(scc[u]);
                        
                    }
                    continue;
                }
                visited[u] = true;
                scc[u] = counter;
                for(int x : adj[u]){
                    Q.push_back(x);
                }
            }
            sort(sccadj[counter].begin(), sccadj[counter].end());
        }
        vector<pii> ans;
        for(int k : visits){
            ans.push_back(pii(-scc[k], k));
        }
        sort(ans.begin(), ans.end());
        //the answer is either this or -1.
        vector<int> relevant;
        for(pii i : ans){
            if(relevant.empty() || relevant.back() != -i.first){
                relevant.push_back(-i.first);
            }
        }
        memset(visited, false, sizeof(visited));
        int k = 0;
        vector<int> Q; Q.push_back(relevant[k]);
        while(!Q.empty()){
            int u = Q.back(); Q.pop_back();
            if(visited[u]){
                continue;
            }
            visited[u] = true;
            if(u == relevant[k + 1]){
                Q = vector<int>();
                k++;
                Q.push_back(relevant[k]);
                if(k == relevant.size() - 1) break;
            }
            for(int x : sccadj[u]){
                if(!visited[x]) Q.push_back(x);
            }
        }
        bool fail = false;

        for(int r : relevant){
            if(!visited[r]){
                fail = true;
                break;
            }
        }
        if(fail){
            cout << -1 << "\n";
        }
        else{
            for(pii i : ans){
                cout << i.second << " ";
            }
            cout << "\n";
        }
    }
    return 0;
}