#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int MAXn = 1e5+10;
int n, m, k;
vector<int> v;
vector<int> nb[MAXn], nb_rev[MAXn], nb_comp[MAXn];
bool mark[MAXn];
vector<int> ordered;
int comp[MAXn];
bool reach[MAXn];

void dfs(int v) {
	mark[v] = true;
	for(int i = 0; i < (int)nb[v].size(); i++) {
		if(!mark[nb[v][i]])
			dfs(nb[v][i]);
	}
	ordered.push_back(v);
}

int cur_comp;
void dfs_rev(int v) {
	mark[v] = true;
	comp[v] = cur_comp;
	for(int i = 0; i < (int)nb_rev[v].size(); i++) {
		if(!mark[nb_rev[v][i]]) {
			dfs_rev(nb_rev[v][i]);
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	int T;
	for(cin >> T; T > 0; T--) {
		cin >> n >> m >> k;
		v.clear();
		for(int i = 0; i < k; i++) {
			int x;
			cin >> x; x--;
			v.push_back(x);
		}
		for(int i = 0; i < n; i++) {
			nb[i].clear();
			nb_rev[i].clear();
			nb_comp[i].clear();
			reach[i] = false;
		}
		for(int i = 0; i < m; i++) {
			int v, u;
			cin >> v >> u;
			v--; u--;
			nb[v].push_back(u);
			nb_rev[u].push_back(v);
		}
		for(int i = 0; i < n; i++) mark[i] = false;
		ordered.clear();
		for(int i = 0; i < n; i++) 
			if(!mark[i])
				dfs(i);
		for(int i = 0; i < n; i++) mark[i] = false;
		cur_comp = 0;
		for(int i = n-1; i >= 0; i--) {
			if(!mark[ordered[i]]) {
				dfs_rev(ordered[i]);
				cur_comp++;
			}
		}
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < (int)nb[i].size(); j++) {
				if(comp[i] != comp[nb[i][j]])
					nb_comp[comp[i]].push_back(comp[nb[i][j]]);
			}
		}
		vector<pair<int,int> > s;
		for(int i = 0; i < (int)v.size(); i++) {
			s.push_back(make_pair(comp[v[i]], v[i]));
		}
		sort(s.begin(), s.end());
		bool f = true;
		for(int i = k-2; i >= 0; i--) {
			if(s[i].first == s[i+1].first) continue;
			reach[s[i+1].first] = true;
			for(int j = s[i+1].first-1; j >= s[i].first; j--) {
				for(int k = 0; k < (int)nb_comp[j].size(); k++) {
					if(reach[nb_comp[j][k]]) {
						reach[j] = true;
						break;
					}
				}
			}
			if(!reach[s[i].first]) {
				f = false;
				break;
			}
			for(int j = s[i+1].first; j >= s[i].first; j--)
				reach[j] = false;
		}
		if(!f) {
			cout << -1 << endl;
			continue;
		}
		for(int i = 0; i < (int)s.size(); i++)
			cout << s[i].second+1 << " ";
		cout << endl;
	}
	return 0;
}