#define _CRT_SECURE_NO_WARNINGS
#pragma comment(linker, "/stack:32777216")
#include <string>
#include <vector>
#include <map>
#include <list>
#include <iterator>
#include <set>
#include <queue>
#include <iostream>
#include <sstream>
#include <stack>
#include <deque>
#include <cmath>
#include <memory.h>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <utility>
#include <time.h>
#include <complex>
using namespace std;

#define FOR(i, a, b) for(int i = (a); i < (b); ++i)
#define RFOR(i, b, a) for(int i = (b) - 1; i >= (a); --i)
#define REP(i, N) FOR(i, 0, N)
#define RREP(i, N) RFOR(i, N, 0)
#define FILL(A,value) memset(A,value,sizeof(A))

#define ALL(V) V.begin(), V.end()
#define SZ(V) (int)V.size()
#define PB push_back
#define MP make_pair
#define Pi 3.14159265358979
#define left fdsfds

typedef long long Int;
typedef unsigned long long UINT;
typedef vector <int> VI;
typedef pair <int, int> PII;

const int INF = 1000000000;
const int MAX = 100007;
const int MAX2 = 2000;
const int BASE = 1000000000;
const int MOD = 1000000007;

vector<int> g[MAX];
vector<int> gr[MAX];

int used[MAX];
int C[MAX];

vector<int> G[MAX];

vector<int> order, component;

void dfs1 (int v) {
	used[v] = true;
	for (size_t i=0; i<g[v].size(); ++i)
		if (!used[ g[v][i] ])
			dfs1 (g[v][i]);
	order.push_back (v);
}

void dfs2 (int v) {
	used[v] = true;
	component.push_back (v);
	for (size_t i=0; i<gr[v].size(); ++i)
		if (!used[ gr[v][i] ])
			dfs2 (gr[v][i]);
}

bool ok = 0;
int goal;

void dfs3(int v)
{
    if (v == goal) ok = 1;
    if (used[v]) return;
    used[v] = 1;
    FOR(i,0,G[v].size())
        dfs3(G[v][i]);
}

int main()
{
    //freopen("in.txt" , "r", stdin);

    int T;
    cin >> T;
    FOR(tt,0,T)
    {
        int n , m , k;
        cin >> n >> m >> k;


        order.clear();
        component.clear();
        FOR(i,0,n)
        {
            g[i].clear();
            gr[i].clear();
            G[i].clear();
            used[i] = 0;
        }

        vector<int> a(k);
        FOR(i,0,k)
        {
            int x;
            scanf("%d" , &x);
            --x;
            a[i] = x;
        }

        FOR(i,0,m)
        {
            int a , b;
            scanf("%d%d" , &a , &b);
            --a;--b;
            g[a].push_back(b);
            gr[b].push_back(a);
        }


        for (int i=0; i<n; ++i)
            if (!used[i])
                dfs1 (i);



        FOR(i,0,n)
        {
            used[i] = 0;
        }

        int cnt = 0;

        for (int i=0; i<n; ++i) {
            int v = order[n-1-i];
            if (!used[v]) {
                dfs2 (v);
                FOR(i,0,component.size())
                {
                    C[component[i]] = cnt;
                }
                ++cnt;
                component.clear();
            }
        }

        vector<PII> A;

        FOR(i,0,k)
        {
            A.push_back(MP(C[a[i]] , a[i]));
        }

        sort(ALL(A));

        FOR(i,0,n)
        {
            FOR(j,0,g[i].size())
            {
                G[C[i]].push_back(C[g[i][j]]);
            }
        }

        FOR(i,0,n)
        {
            used[i] = 0;
        }
        bool q = 1;
        RFOR(i,A.size() - 1 , 0)
        {
            ok = 0;
            goal = A[i + 1].first;
            dfs3(A[i].first);
            q &= ok;
        }
        if (q)
        {
            FOR(i,0,A.size())
            {
                printf("%d " , A[i].second + 1);
            }
            printf("\n");
        }
        else
        {
            printf("-1\n");
        }

    }

    return 0;
}