#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <cmath>
#include <iostream>
#include <set>
#include <fstream>
#include <string>
#include <vector>

using namespace std;
#define FOR(i,s,e) for (int i=(s); i<(e); i++)
#define FOE(i,s,e) for (int i=(s); i<=(e); i++)
#define FOD(i,s,e) for (int i=(s); i>=(e); i--)
#define LL long long
#define eps 1e-9
#define pi acos(-1.0)
LL max(LL a,LL b){if (a>b){return a;} else {return b;}}
LL min(LL a,LL b){if (a<b){return a;} else {return b;}}

vector<int> nxt[200001], bac[200001];
vector<int> nn[200001];
int od[200001], ys[200001];
int QQ[200001], top, tail;
vector<int> have[200001];
int par[200001];
int n, taken;
int m, k, cnt;
vector<int> Q, S, Z;
int visit[200001], rep[200001], ok[200001];

int pp;


void DFS(int u){
    visit[u] = 1;
    FOR(i, 0, nxt[u].size()) if (!visit[nxt[u][i]]) DFS(nxt[u][i]);
    S.push_back(u);
}

void DFS2(int color, int u){
  //  printf("GROUP %d INTO %d\n", u, color);
    visit[u] = 2;
    have[color].push_back(u);
    rep[u] = color;
    FOR(i, 0, bac[u].size()) if (visit[bac[u][i]] == 1) DFS2(color, bac[u][i]);
}

int fail;
int head;

void DFS3(int u){
    od[u] = -1;
    sort(have[u].begin(), have[u].end());
    FOR(i, 0, have[u].size()) if (ok[have[u][i]]) Z.push_back(have[u][i]);
    FOR(i, 0, nn[u].size()){
        od[nn[u][i]]--;
        if (od[nn[u][i]] == 0) {
            if (ys[nn[u][i]]){
                QQ[top++] = nn[u][i];
                if (top - tail >= 2) fail = 1;
            } else DFS3(nn[u][i]);
        }
    }
}

void solve(){
    scanf("%d%d%d", &n, &m, &k);
    while (Q.size()) Q.pop_back();
    while (S.size()) S.pop_back();
    while (Z.size()) Z.pop_back();
    FOE(i, 1, 200000) while (nxt[i].size()) nxt[i].pop_back();
    FOE(i, 1, 200000) while (have[i].size()) have[i].pop_back();
    FOE(i, 1, 200000) while (nn[i].size()) nn[i].pop_back();
    FOE(i, 1, 200000) while (bac[i].size()) bac[i].pop_back();
    FOE(i, 1, 200000) od[i] = ys[i] = ok[i] = visit[i] = 0;
    FOE(i, 1, k){
        int t;
        scanf("%d", &t);
        ok[t] = 1;
        Q.push_back(t);
    }
    FOE(i, 1, m){
        int a, b;
        scanf("%d%d", &a, &b);
        if (a != b){
        nxt[a].push_back(b);
        bac[b].push_back(a);
        }
    }
    FOE(i, 1, n) if (!visit[i]) DFS(i);

    cnt = pp = taken = fail = 0;
 //   FOR(i, 0, S.size()) printf("%d ", S[i]);
  //  puts("");
    FOD(i, n - 1, 0) if (visit[S[i]] == 1){
        DFS2(++cnt, S[i]);
    }

    FOE(i, 1, n) FOR(j, 0, nxt[i].size()) if (rep[i] != rep[nxt[i][j]]){
        nn[rep[i]].push_back(rep[nxt[i][j]]);
        od[rep[nxt[i][j]]]++;
    }

    FOR(i, 0, k) ys[rep[Q[i]]] = 1;
    FOE(i, 1, cnt) if (ys[i]) pp++;

    FOE(i, 1, cnt) par[i] = -1;
    head = -1;
    top = tail = fail = 0;
    FOE(i, 1, cnt) if (od[i] == 0){
        DFS3(i);
        while (top > tail){
            DFS3(QQ[tail++]);
        }
    }

    if (fail){
        puts("-1");
        return;
    }

    FOR(i, 0, Z.size() - 1) printf("%d ", Z[i]);
    printf("%d\n", Z[Z.size() - 1]);
}

int main(){
   // freopen("out.txt", "r", stdin);
    int t;
    scanf("%d", &t);
    while (t--) solve();
    return 0;
}