#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <cstdio>
#include <cstdlib>
#include <stack>
#include <cstring>
#include <iomanip>
#include <cctype>
#include <map>
#include <cassert>

using namespace std;

vector<vector<int> > G,Gr;

const int N = 100005;
int visited[N];

vector<int> order;

void dfs1(int u) {
    for(int i = 0;i < Gr[u].size();i++) {
        int v = Gr[u][i];
        if(!visited[v]) {
            visited[v] = 1;
            dfs1(v);
        }
    }
    order.push_back(u);
}
int cur;
int p[N];

void dfs2(int u) {
    for(int i = 0;i < G[u].size();i++) {
        int v = G[u][i];
        if(!visited[v]) {
            p[v] = cur;
            visited[v] = 1;
            dfs2(v);
        }
    }
}

int mark[N];

vector<vector<int> > sccSorted;

vector<set<int> > Graph;

int val[N];

#define indeg first.first
#define value first.second
#define vertex second

int getInt() {
    int n = 0;
    char c = getchar_unlocked();
    while(!isdigit(c)) c = getchar_unlocked();
    while(isdigit(c)) {
        n = (n<<3) + (n<<1) + c - '0';
        c = getchar_unlocked();
    }
    return n;
}

int dp[N];

void solve() {
    int n,m,k; cin>>n>>m>>k;
    G.clear();
    Gr.clear();
    G.resize(n + 1);
    Gr.resize(n + 1);
    for(int i = 1;i <= n;i++) mark[i] = 0;
    for(int i = 0;i < k;i++) {
        int t = getInt();
        mark[t] = 1;
    }
    for(int i = 0;i < m;i++) {
        int x = getInt(),y = getInt();
        G[x].push_back(y);
        Gr[y].push_back(x);
    }
    for(int i = 1;i <= n;i++) visited[i] = 0;
    order.clear();
    for(int i = 1;i <= n;i++) {
        if(!visited[i]){
            visited[i] = 1;
            dfs1(i);
        }
    }
    for(int i = 1;i <= n;i++) visited[i] = 0;
    reverse(order.begin(),order.end());
    cur = 0;
    for(int i = 0;i < n;i++) {
        if(!visited[order[i]]) {
            p[order[i]] = cur;
            visited[order[i]] = 1;
            dfs2(order[i]);
            cur++;
        }
    }
    sccSorted.clear();
    sccSorted.resize(cur);
    for(int i = 1;i <= n;i++) {
        if(mark[i]) {
            sccSorted[p[i]].push_back(i);
        }
    }
    for(int i = 0;i < cur;i++) {
        sort(sccSorted[i].begin(),sccSorted[i].end());
        if(sccSorted[i].size() > 0) val[i] = sccSorted[i][0];
        else val[i] = 0;
    }
    Graph.clear();
    Graph.resize(cur);
    for(int i = 1;i <= n;i++) {
        for(int j = 0;j < G[i].size();j++) {
            if(p[i] != p[G[i][j]]) {
                Graph[p[i]].insert(p[G[i][j]]);
            }
        }
    }
    vector<int> indegree(cur,0);
    for(int i = 0;i < cur;i++) {
        for(set<int>::iterator it = Graph[i].begin();it != Graph[i].end();it++) {
            indegree[*it]++;
        }
    }
    priority_queue<pair<pair<int,int>,int>,vector< pair<pair<int,int>,int> >, greater< pair<pair<int,int>,int> > > q;
    for(int i = 0;i < cur;i++) {
        if(indegree[i] == 0)
            q.push(make_pair(make_pair(indegree[i],val[i]),i));
    }
    vector<int> finalOrder;
    while(!q.empty()) {
        pair<pair<int,int>,int> c = q.top();
        q.pop();
        if(c.indeg == indegree[c.vertex] && indegree[c.vertex] == 0) {
            finalOrder.push_back(c.vertex);
            for(set<int>::iterator it = Graph[c.vertex].begin();it != Graph[c.vertex].end();it++) {
                int v = *it;
                indegree[v]--;
                q.push( make_pair( make_pair(indegree[v],val[v])  , v) );
            }
        }
    }
    vector<int> ans;
    for(int i = 0;i < cur;i++) {
        
        for(int j = 0;j < sccSorted[finalOrder[i]].size();j++) {
            ans.push_back(sccSorted[finalOrder[i]][j]);
        }
    }
    for(int i = 0;i < cur;i++) dp[i] = -1;
    vector<int> theOrder;
    for(int i = 0;i < cur;i++) {
        int u = finalOrder[i];
        for(set<int>::iterator it = Graph[u].begin();it != Graph[u].end();it++) {
            int v = *it;
            if(sccSorted[u].size() > 0) dp[v] = u;
            else dp[v] = dp[u];
        }
        if(sccSorted[u].size() > 0) {
            theOrder.push_back(u);
        }
    }
    for(int i = 1;i < theOrder.size();i++) {
        if(dp[theOrder[i]] != theOrder[i - 1]) {
            cout<<-1<<endl;
            return;
        }
    }
    for(int i = 1;i <= n;i++) visited[i] = 0;
    visited[ans[0]] = 1;
    dfs2(ans[0]);
    for(int i = 1;i <= n;i++) {
        if(mark[i]) {
            if(!visited[i]) {
                cout<<-1<<endl;
                return;
            }
        }
    }
    for(int i = 0;i < k;i++) {
        printf("%d ",ans[i]);
    }
    cout<<endl;

}

int main() {
    int t; cin>>t;
    while(t--) {
        solve();
    }
}