#include <bits/stdc++.h>
using namespace std;

int t;

int n;
int m;
int k;

int p1, p2;

vector <int> graf[100007];
vector <int> farg[100007];
int chce[100007];

vector <int> wyn;

int post[100007];
int bylo[100007];
int spo[100007];
int ok[100007];
int l;

vector <int> grafs[100007];
int in[100007];

vector <int> ktore[100007];

int wrzu;

vector <int> roz;

int czy;

int u;

void dfs(int v)
{
    bylo[v]=1;
    for (int i=0; i<farg[v].size(); i++)
    {
        if (!bylo[farg[v][i]])
        {
            dfs(farg[v][i]);
        }
    }
    l++;
    post[l]=v;
}

void dfs2(int v)
{
    spo[v]=l;
    for (int i=0; i<graf[v].size(); i++)
    {
        if (!spo[graf[v][i]])
        {
            dfs2(graf[v][i]);
        }
    }
}

int main()
{
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d%d", &n, &m, &k);
        for (int i=1; i<=n; i++)
        {
            chce[i]=0;
            graf[i].clear();
            farg[i].clear();
            bylo[i]=0;
            post[i]=0;
            spo[i]=0;
            in[i]=0;
            grafs[i].clear();
            ktore[i].clear();
            ok[i]=0;
        }
        roz.clear();
        wyn.clear();
        wrzu=0;
        l=0;
        czy=1;
        for (int i=1; i<=k; i++)
        {
            scanf("%d", &p1);
            chce[p1]=1;
        }
        for (int i=1; i<=m; i++)
        {
            scanf("%d%d", &p1, &p2);
            graf[p1].push_back(p2);
            farg[p2].push_back(p1);
        }
        for (int i=1; i<=n; i++)
        {
            if (!bylo[i])
            {
                dfs(i);
            }
        }
        l=0;
        for (int i=n; i; i--)
        {
            if (!spo[post[i]])
            {
                l++;
                dfs2(post[i]);
            }
        }
        for (int i=1; i<=n; i++)
        {
            if (chce[i])
            {
                ktore[spo[i]].push_back(i);
            }
            for (int j=0; j<graf[i].size(); j++)
            {
                if (spo[i]!=spo[graf[i][j]])
                {
                    grafs[spo[i]].push_back(spo[graf[i][j]]);
                    in[spo[graf[i][j]]]++;
                }
            }
        }
        for (int i=1; i<=l; i++)
        {
            sort(ktore[i].begin(), ktore[i].end());
            if (!ktore[i].empty())
            ok[i]=ktore[i][0];
            if (!in[i])
            {
                roz.push_back(i);
                if (ok[i])
                {
                    wrzu++;
                }
            }
        }
        while(!roz.empty())
        {
            if (wrzu>1)
            {
                czy=0;
                break;
            }
            u=roz.back();
            roz.pop_back();
            if (ok[u])
            {
                wrzu--;
                for (int i=0; i<ktore[u].size(); i++)
                {
                    wyn.push_back(ktore[u][i]);
                }
            }
            for (int i=0; i<grafs[u].size(); i++)
            {
                in[grafs[u][i]]--;
                if (!in[grafs[u][i]])
                {
                    roz.push_back(grafs[u][i]);
                    if (ok[grafs[u][i]])
                    {
                        wrzu++;
                    }
                }
            }
        }
        if (!czy)
        printf("-1\n");
        else
        {
            for (int i=0; i<wyn.size(); i++)
            printf("%d ", wyn[i]);
            printf("\n");
        }
    }
    return 0;
}