//Solution by Zhusupov Nurlan
#include <iostream>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <set>
#include <vector>
#include <map>
#include <string>
#include <stack>
#include <queue>
#include <ctime>

using namespace std;

typedef long long LL;
typedef map<string , int> MSI;
typedef vector<int> VI;
typedef pair<int, int> PII;

#define pb(x) push_back(x)
#define sqr(x) ((x) * (x))
#define F first
#define S second
#define SZ(t) ((int) t.size())
#define len(t) ((int) t.length())
#define base LL(1e9 + 7)
#define fname ""
#define sz 1000 * 200
#define EPS (1e-8)
#define INF ((int)1e9 + 9)
#define write(xx) printf("%d" , xx);
#define readln(xx) getline(cin , xx)
#define read(xx) scanf("%d" , &xx)
#define mp make_pair

const double PI  = acos(-1.0);

VI ans, a[sz], b[sz], r[sz], e[sz];
int T, c[sz], n, last, cur, bad, m, v, u, k, cnt, g, color[sz], d[sz], was[sz];

void dfs(int v)
{
    was[v] = 1;
    for (int i = 0; i < a[v].size(); i++)
        if (!was[a[v][i]])
            dfs(a[v][i]);
    d[++cnt] = v;
}

void dfsr(int v)
{
    color[v] = g;
    for (int i = 0; i < b[v].size(); i++)
        if (!color[b[v][i]])
            dfsr(b[v][i]);
        else
            r[color[b[v][i]]].pb(g);
}

void topsort(int v)
{
    was[v] = 1;
    for (int i = 0; i < r[v].size(); i++)
        if (!was[r[v][i]])
            topsort(r[v][i]);
    d[++cnt] = v;
}

void go(int v)
{
    if (v == last)
        cur = 1;
    was[v] = 1;
    for (int i = 0; i < r[v].size(); i++)
        if (!was[r[v][i]])
        {
            go(r[v][i]);
        }
        else
            if (last == r[v][i]) cur = 1;
}



int main()
{
//    freopen(fname"in", "r", stdin);
//    freopen(fname"out", "w", stdout);

    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> T;
    while (T--)
    {
        cin >> n >> m >> k;

        for (int i = 1; i <= k; i++)
            cin >> c[i];

        for (int i = 1; i <= m; i++)
        {
            cin >> v >> u;
            a[v].pb(u);
            b[u].pb(v);
        
        }

        for (int i = 1; i <= n; i++)
            if (!was[i])
                dfs(i);

        for (int i = n; i >= 1; i--)
        {
            v = d[i];
            if (!color[v])
            {
                g++;
                dfsr(v);
            }
        }

        for (int i = 1; i <= k; i++)
        {
            e[color[c[i]]].pb(c[i]);
        }
        
        for (int i = 1; i <= g; i++)
        {
            sort(e[i].begin(), e[i].end());
            reverse(e[i].begin(), e[i].end());
        }
        for (int i = 1; i <= n; i++)
            was[i] = 0;

        cnt = 0;
        for (int i = 1; i <= g; i++)
            if (!was[i])
                topsort(i);
        for (int i = 1; i <= g; i++)
            was[i] = 0;

        ans.clear();
        last = bad = 0;
        for (int i = 1; i <= g; i++)
        {
            v = d[i];
            if (e[v].empty()) continue;
            for (int j = 0; j < e[v].size(); j++)
                ans.pb(e[v][j]);
            if (last == 0)
                last = v;
            cur = 0;
            go(v);
            if (!cur)
                bad = 1;
            last = v;
        }

        if (bad)
            cout << -1 << "\n";
        else
        {
            reverse(ans.begin(), ans.end());
            for (int i = 0; i < ans.size(); i++)
                cout << ans[i] << " ";
            cout << "\n";
        }

        for (int i = 1; i <= n; i++)
            r[i].clear(), e[i].clear(), a[i].clear(), b[i].clear(), was[i] = color[i] = 0;
        g = cnt = 0;
        ans.clear();
    }

}