#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct SCC{
    vector<int> used;
    vector<vector<int> > g2;

    void dfs1(vector<int>*g, int x, vector<int>&ns){
        if (used[x]==1) return;
        used[x]=1;
        for (int nx:g[x]){
            g2[nx].push_back(x);
            dfs1(g, nx, ns);
        }
        ns.push_back(x);
    }

    void dfs2(int x, vector<int>&co){
        if (used[x]==2) return;
        used[x]=2;
        co.push_back(x);
        for (int nx:g2[x]){
            dfs2(nx, co);
        }
    }

    SCC(vector<int>*g, int n, vector<vector<int> >&ret):used(n+1),g2(n+1){
        vector<int> ns;
        for (int i=1;i<=n;i++){
            dfs1(g, i, ns);
        }
        for (int i=n-1;i>=0;i--){
            if (used[ns[i]]!=2){
                ret.push_back(vector<int>());
                dfs2(ns[i], ret.back());
            }
        }
    }
};

int t;
int n, m, k;
int vv[101010];
vector<int> v[101010];

int kk[101010];
vector<int> kv[101010];
int kd[101010];
int kr[101010];
int kh[101010];

void solve() {
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++) vv[i] = 0;
    for (int i = 1; i <= n; i++) kd[i] = 0;
    for (int i = 1; i <= n; i++) kr[i] = 0;
    for (int i = 1; i <= n; i++) kh[i] = 0;
    for (int i = 0; i < k; i++) {
        int x;
        cin >> x;
        vv[x] = 1;
    }
    for (int i = 1; i <= n; i++) v[i].clear();
    for (int i = 1; i <= n; i++) kv[i].clear();
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        v[a].push_back(b);
    }
    vector<vector<int>> r;
    SCC s(v, n, r);
    vector<int> w;
    int uc = 0;
    for (int i = 0; i < r.size(); i++) {
        vector<int> u;
        int us = -1;
        for (int j = 0; j < r[i].size(); j++) {
            kk[r[i][j]] = i+1;
            if (vv[r[i][j]]) {
                u.push_back(r[i][j]);
                us = r[i][j];
            }
        }
        if (us != -1) {
            kh[i+1] = 1;
            uc++;
        }
        sort(u.begin(), u.end());
        for (int i = 0; i < u.size(); i++) {
            w.push_back(u[i]);
        }
    }
    
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < v[i].size(); j++) {
            int a = i;
            int b = v[i][j];
            kv[kk[a]].push_back(kk[b]);
        }
    }
    
    for (int i = r.size()-1; i >= 0; i--) {
        int u = 0;
        for (int j = 0; j < kv[i+1].size(); j++) {
            u = max(u,kd[kv[i+1][j]]);
        }
        kd[i+1] = kh[i+1]+u;
    }
    if (kd[kk[w[0]]] < uc) {
        cout << "-1\n";
        return;
    }
    
    for (int i = 0; i < w.size(); i++) {
        cout << w[i];
        if (i != w.size()-1) cout << " ";
    }
    cout << "\n";
}

int main() {
    cin >> t;
    for (int i = 0; i < t; i++) solve();
}