#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cassert>
#define MAXN 100010

using namespace std;

int n,m,k;
int x[MAXN],y[MAXN];
vector<int> e[MAXN];
int id[MAXN],lo[MAXN],curid;
bool onstk[MAXN];
vector<int> stk;
vector<int> c[MAXN];
vector<int> a;
int cid[MAXN];
bool has[MAXN];
vector<int> ee[MAXN];
vector<int> comps;
int ord[MAXN];
int dp[MAXN];

void dfs(int u) {
    stk.push_back(u);
    id[u] = lo[u] = ++curid;
    onstk[u] = 1;
    for (int v : e[u]) {
        if (!id[v]) {
            dfs(v);
            lo[u] = min(lo[u], lo[v]);
        }
        else if (onstk[v]) lo[u] = min(lo[u], id[v]);
    }
    if (id[u] == lo[u]) {
        while (1) {
            int v = stk.back();
            cid[v] = u;
            c[u].push_back(v);
            if (y[v]) has[u] = 1;
            stk.pop_back();
            onstk[v] = 0;
            if (v == u) break;
        }
        //cerr << u << ": ";
        for (int v : c[u]) {
            //cerr << v << ' ';
            for (int w : e[v]) {
                if (cid[w] != u) {
                    ee[u].push_back(cid[w]);
                }
            }
        }
        //cerr << endl;
        sort(ee[u].begin(),ee[u].end());
        ee[u].erase(unique(ee[u].begin(),ee[u].end()),ee[u].end());
        comps.push_back(u);
        if (has[u]) a.push_back(u);
    }
}

bool dfs2(int u, int e) {
    if (u == e) return 1;
    if (ord[u] > ord[e]) return 0;
    if (dp[u] != -1) return dp[u];
    dp[u] = 0;
    for (int v : ee[u]) {
        if (dfs2(v,e)) {
            dp[u] = 1;
            return 1;
        }
    }
    return 0;
}

bool ok() {
    reverse(comps.begin(),comps.end());
    for (int i = 0; i < comps.size(); i++)
        ord[comps[i]] = i;
    reverse(a.begin(),a.end());
    for (int i = 0; i + 1 < a.size(); i++) {
        if (!dfs2(a[i],a[i+1])) return 0;
    }
    return 1;
}

void init() {
    memset(x,0,sizeof(x));
    memset(y,0,sizeof(y));
    for (int i = 1; i <= n; i++) e[i].clear();
    memset(id,0,sizeof(id));
    memset(lo,0,sizeof(lo));
    curid = 0;
    stk.clear();
    for (int i = 1; i <= n; i++) c[i].clear();
    a.clear();
    memset(cid,0,sizeof(cid));
    memset(has,0,sizeof(has));
    for (int i = 1; i <= n; i++) ee[i].clear();
    comps.clear();
    memset(ord,0,sizeof(ord));
    memset(dp,-1,sizeof(dp));
}

int main() {
    ios::sync_with_stdio(0);
    int T;
    cin >> T;
    while (T--) {
        cin >> n >> m >> k;
        init();
        for (int i = 0; i < k; i++) {
            cin >> x[i];
            y[x[i]] = 1;
        }
        for (int i = 0; i < m; i++) {
            int u,v;
            cin >> u >> v;
            e[u].push_back(v);
        }

        for (int i = 1; i <= n; i++) {
            if (!id[i]) dfs(i);
        }

        if (!ok()) {
            cout << -1 << '\n';
        }
        else {
            for (int i : a) {
                sort(c[i].begin(),c[i].end());
                for (int j : c[i]) {
                    if (y[j]) cout << j << ' ';
                }
            }
            cout << '\n';
        }
    }
}