#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <sstream>
#include <fstream>
#include <functional>
using namespace std;

#ifdef LOCAL
	#define eprintf(...) fprintf(stderr, __VA_ARGS__)
#else
	#define eprintf(...) 42
#endif

typedef long long ll;
typedef pair<int, int> pii;
#define X first
#define Y second
#define mp make_pair

const int N = (int)1e5 + 10;
vector <int> g[N], gT[N], gC[N];
int topSort[N];
int cntT = 0, cc = 0;
int needComp[N];
vector <int> vComp[N];
int need[N], dp[N];
int color[N];
int used[N];
int n, m, k;

void init()
{
	cntT = 0;
	cc = 0;
	for (int i = 0; i < n; i++)
	{
		used[i] = 0;
		g[i].clear();
		gT[i].clear();
		gC[i].clear();
		color[i] = -1;
		vComp[i].clear();
		needComp[i] = 0;
		dp[i] = 0;
	}
}

void read()
{
	scanf("%d%d%d", &n, &m, &k);
	init();
	for (int i = 0; i < k; i++)
	{
		scanf("%d", &need[i]);
		need[i]--;
	}
	for (int i = 0; i < m; i++)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		a--, b--;
		g[a].push_back(b);
		gT[b].push_back(a);
	}
}

void dfsTopSort(int v)
{
	used[v] = 1;
	for (int to : g[v])
	{
		if (!used[to])
			dfsTopSort(to);
	}
	topSort[cntT++] = v;
}

void paint(int v, int c)
{
	color[v] = c;
	for (int to : gT[v])
	{
		if (color[to] == -1)
			paint(to, c);
		else if (color[to] != color[v])
			gC[color[to]].push_back(c);
	}
}

void printComp(int id)
{
	sort(vComp[id].begin(), vComp[id].end());
	for (int x : vComp[id])
		printf("%d ", x + 1);
}

void solve()
{
	for (int i = 0; i < n; i++)
	{
		if (!used[i])
			dfsTopSort(i);
	}
	for (int i = cntT - 1; i >= 0; i--)
	{
		int v = topSort[i];
		if (color[v] == -1)
			paint(v, cc++);
	}
	for (int i = 0; i < k; i++)
	{
		needComp[color[need[i]]] = 1;
		vComp[color[need[i]]].push_back(need[i]);
	}
	int v = -1;
	for (int i = cc - 1; i >= 0; i--)
	{
		dp[i] = (int)vComp[i].size();
		for (int to : gC[i])
			dp[i] = max((int)vComp[i].size() + dp[to], dp[i]);
		if (dp[i] == k)
			v = i;
	}
	if (v == -1)
	{
		puts("-1");
		return;
	}
	while (k > 0)
	{
		printComp(v);
		k -= (int)vComp[v].size();
		for (int to : gC[v])
		{
			if (dp[to] == k)
				v = to;
		}
	}
	puts("");
}

int main()
{
	int t;
	scanf("%d", &t);
	for (int i = 0; i < t; i++)
	{
		read();
		solve();
	}
	return 0;
}