#include <bits/stdc++.h>

using namespace std;

int N, M, K;
vector<int> adj[100001];
vector<int> adj2[100001];
int comp[100001], ncomp;
int idx[100001], low[100001], now;
bool onS[100001];
vector<int> S;
int A[100001];
vector<int> stuff[100001];
vector<int> collect;
int dp[100001];

void dfs(int u)
{
    idx[u]=low[u]=++now;
    onS[u]=true;
    S.push_back(u);
    for(auto& v: adj[u])
    {
        if(!idx[v])
        {
            dfs(v);
            low[u]=min(low[u], low[v]);
        }
        else if(onS[v])
            low[u]=min(low[u], idx[v]);
    }
    if(idx[u]==low[u])
    {
        ncomp++;
        int n;
        do
        {
            n=S.back();
            S.pop_back();
            onS[n]=false;
            comp[n]=ncomp;
        }
        while(n!=u);
    }
}

void _main()
{
    scanf("%d%d%d", &N, &M, &K);
    for(int i=1; i<=N; i++)
    {
        adj[i].clear();
        adj2[i].clear();
        comp[i]=0;
        idx[i]=low[i]=0;
        onS[i]=0;
        stuff[i].clear();
        dp[i]=0;
    }
    S.clear();
    ncomp=now=0;
    for(int i=0; i<K; i++)
        scanf("%d", A+i);
    int a, b;
    for(int i=0; i<M; i++)
    {
        scanf("%d%d", &a, &b);
        adj[a].push_back(b);
    }
    for(int i=1; i<=N; i++) if(!idx[i])
        dfs(i);
    for(int i=0; i<K; i++)
        stuff[comp[A[i]]].push_back(A[i]);
    collect.clear();
    for(int i=1; i<=N; i++)
        for(auto& v: adj[i]) if(comp[i]!=comp[v])
            adj2[comp[v]].push_back(comp[i]);
    for(int i=1; i<=ncomp; i++)
    {
        sort(adj2[i].begin(), adj2[i].end());
        adj2[i].resize(unique(adj2[i].begin(), adj2[i].end())-adj2[i].begin());
    }
    vector<int> order;
    for(int i=ncomp; i>=1; i--)
    {
        if(!stuff[i].empty())
        {
            sort(stuff[i].begin(), stuff[i].end());
            for(auto& it: stuff[i])
                collect.push_back(it);
            order.push_back(i);
        }
    }
    int cnt=0;
    for(int i=1; !order.empty() && i<=ncomp; i++)
    {
        int f=0;
        if(i==order.back())
        {
            if(dp[i]!=cnt++)
            {
                printf("-1\n");
                return;
            }
            order.pop_back();
            f=1;
        }
        for(auto& v: adj2[i])
            dp[v]=max(dp[v], dp[i]+f);
    }
    for(auto& it: collect)
        printf("%d ", it);
    printf("\n");
}

int main()
{
    int TEST;
    scanf("%d", &TEST);
    while(TEST--)
        _main();
    return 0;
}