/**********************************************************************************************
* Sometimes it is the people no one imagines anything of who do the things no one can imagine.*
*                                                                                             *
*                                    User: LLcoolNJ                                           *
***********************************************************************************************/

#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <complex>
#include <utility>
#include <fstream>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cctype>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <climits>

using namespace std;


typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<VI> VVI;
typedef pair<int,int> PII;
typedef vector<PII> VII;

#define REP(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define rev(i,n) REV(i,n,0)
#define TR(i,x) for(typeof(x.begin()) i=x.begin();i!=x.end();i++)
#define GI ({ int x; scanf("%d",&x); x; })
#define GLL ({ LL x; scanf("%lld",&x); x; })
#define PRI(x) printf("%d",x);
#define PRC(x) printf("%c",x);
#define PLL(x) printf("%lld",x);
#define ALL(v) v.begin(),v.end()
#define PB push_back
#define MP make_pair
#define PQ priority_queue
#define inf (int)(1e9)
#define linf (LL)(1e18)
#define eps (double)(1e-9)
#define leps (LD)(1e-18)
#define PI (double)(3.141592653589793238)

#define MAX 100005

VI AdjList[MAX];
bool dfs_num[MAX];
bool li[MAX];

VI ts;
void dfs2(int u) {
    dfs_num[u] = true;
    for (int j = 0; j < (int)AdjList[u].size(); j++) {
        int v = AdjList[u][j];
        if (dfs_num[v] == false)
            dfs2(v);
    }
    ts.push_back(u);
}


int main(){
    int T;
    int n,m,k, v;
    int a,b;
    scanf("%d",&T);
    VI vs;
    while(T--){
        vs.clear();
        ts.clear();
        scanf("%d %d %d",&n,&m,&k);
        memset(li, false, sizeof li);
        for(int i=0;i<k;i++){
            scanf("%d",&v);
            li[v] = true;
            vs.PB(v);
        }
        for(int i=0;i<m;i++){
            scanf("%d %d",&a, &b);
            AdjList[a].PB(b);
        }
        ts.clear();
        memset(dfs_num, false, sizeof dfs_num);
        for (int i = 1; i <= n; i++)
            if (dfs_num[i] == false)
                dfs2(i);
        VI z;
        for (int i = (int)ts.size() - 1; i >= 0; i--){
            if(li[ts[i]])
                z.PB(ts[i]);
        }
        bool fl = true;
        for(int i=0;i<k;i++){
            if(z[i] != vs[i]){
                fl = false;
                break;
            }
        }
        if(fl)
            printf("-1\n");
        else{
            for(int i=0;i<k;i++){
                printf("%d ",z[i]);
            }
            printf("\n");
        }

    }
	return 0;
}