//Done by: gohan95

#include <bits/stdc++.h>

#define MAX 10000005
#define INF 1000000007
#define INFLL 1000000000000000007LL
#define MOD 1000000007
#define PI 3.14159265359

#define pii pair <int, int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define set0(a) memset(a, 0, sizeof(a))
#define setdp(a) memset(a, -1, sizeof(a))
#define gc getchar
#define pc putchar

using namespace std;

int idx, n, m, K, P;
stack <int> st;
int has[200005], vis[200005], child[200005], coun[200005], ans[200005];
vector <pii> edges;

struct srt
{
    int id;
    int ll;
    int on;
} node[200005];

vector <int> adj[200005], out[200005], vv[200005];

void scn(int yy)
{
    //cout << yy << endl;
    node[yy].id = idx;
    node[yy].ll = idx;
    int yu = P;
    idx++;
    P++;
    st.push(yy);
    node[yy].on = 1;

    int i, t1;

    for (i = 0; i < adj[yy].size(); i++) {
        t1 = adj[yy][i];
        if (node[t1].id == -1) {
            scn(t1);
            node[yy].ll = min(node[yy].ll, node[t1].ll);
        }

        else if (node[t1].on) {
            node[yy].ll = min(node[yy].ll, node[t1].id);
        }
    }

    if (node[yy].ll == node[yy].id) {
        t1 = 0;
        while (st.top() != yy) {
            node[st.top()].on = 0;
            node[st.top()].ll = yu;

            if (has[st.top()]) {
                t1++;

                out[node[yy].ll].pb(st.top());
            }


            st.pop();
        }

        if (has[yy]) {
            t1++;

            out[node[yy].ll].pb(yy);
        }

        ans[node[yy].ll] = t1;
        node[yy].ll = yu;
        node[yy].on = 0;
        st.pop();
    }
}

void tarjan()
{
    idx = 0;
    P = 0;

    while (!st.empty())
        st.pop();

    int i;
    for (i = 1; i <= n; i++) {
        if (node[i].id == -1)
            scn(i);
    }
}

int dfs(int yy)
{
    vis[yy] = 1;

    int i, t1, t2 = 0, t3, pos = -1;



    for (i = 0; i < vv[yy].size(); i++) {
        t1 = vv[yy][i];
        if (!vis[t1]) {
            coun[t1] = dfs(t1);
        }
        t3 = coun[t1];

        if (t3 > t2) {
            t2 = t3;
            pos = t1;
        }
    }

    t2 += ans[yy];
    child[yy] = pos;

    return t2;
}

void fnc(int yy)
{
    int i;

    for (i = 0; i < out[yy].size(); i++)
        cout << out[yy][i] << " ";

    if (child[yy] != -1)
        fnc(child[yy]);
}

void mems()
{
    int i;

    set0(has);
    set0(vis);
    set0(ans);

    for (i = 0; i < 100005; i++) {
        adj[i].clear();
        vv[i].clear();
        out[i].clear();

        node[i].id = -1;
        node[i].ll = 0;
        node[i].on = 0;
    }

    edges.clear();
}

int main()
{
    int t;

    cin >> t;

    while (t--) {
        mems();
        int i, j, u, v;

        cin >> n >> m >> K;

        for (i = 1; i <= K; i++) {
            scanf("%d", &u);
            has[u] = 1;
        }

        for (i = 1; i <= m; i++) {
            scanf("%d%d", &u, &v);

            node[i].id = -1;

            adj[u].pb(v);
            edges.pb(mp(u, v));
        }

        tarjan();

        /*for (i = 1; i <= n; i++)
            cout << node[i].ll << " ";
        cout << endl;*/

        //return 0;

        for (i = 0; i < m; i++) {
            u = edges[i].fi;
            v = edges[i].se;

            //cout << u << " " << node[u].ll << endl;
            //cout << v << " " << node[v].ll << endl;

            if (node[u].ll != node[v].ll)
                vv[node[u].ll].pb(node[v].ll);
        }

        /*for (i = 0; i <= n; i++) {
            if (vv[i].size() == 0)
                continue ;

            cout << i << "   --->    ";
            for (j = 0; j < vv[i].size(); j++)
                cout << vv[i][j] << " ";
            cout << endl;
            cout << ans[i] << endl;
        }*/

        for (i = 0; i <= n; i++)
            child[i] = -1;

        for (i = 0; i <= n; i++) {
            if (!vis[i])
                coun[i] = dfs(i);

            //cout << i << " " << coun[i] << " " << child[i] << endl;
        }
        int tmp = 0;
        for (i = 0; i <= n; i++) {
            if (out[i].size() == 0)
                continue ;

            sort(out[i].begin(), out[i].end());
        }


        int flag = 0;
        for (i = 0; i <= n; i++) {
            if (coun[i] == K) {
                flag = 1;

                fnc(i);

                break;
            }
        }

        if (flag)
            cout << endl;

        else
            cout << "-1\n";
    }

    return 0;
}