#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 5;

int n, m, k;
int low[N], num[N];
int sccID[N];
int sccCount;
int mustVisitCount[N];
int memo[N];
bool active[N];
bool mustVisit[N];
bool visit[N];
vector<int> adj[N];
vector<int> adjc[N];
vector<int> st;
vector<vector<int>> sccs;

int timer;
void dfs(int u, int par) {
  num[u] = low[u] = ++timer;
  st.push_back(u);
  active[u] = true;
  for (int v : adj[u]) {
    if (num[v] == -1) {
      dfs(v, u);
      low[u] = min(low[u], low[v]);
    } else if (active[v]) {
      low[u] = min(low[u], num[v]);
    }
  }
  if (num[u] == low[u]) {
    sccs.push_back(vector<int>());
    for (;;) {
      int v = st.back(); st.pop_back();
      active[v] = false;
      sccID[v] = sccCount;
      if (mustVisit[v]) {
        mustVisitCount[sccCount]++;
        sccs.back().push_back(v);
      }
      if (v == u) break;
    }
    sccCount++;
  }
}

int countVisit(int u) {
  if (memo[u] != -1) {
    return memo[u];
  }
  int ret = 0;
  for (int v : adjc[u]) {
    ret = max(ret, countVisit(v));
  }
  ret += mustVisitCount[u];
  return memo[u] = ret;
}

vector<int> getOrder(int start) {
  vector<int> ret;
  int need = k;
  int cur = start;
  while (need > 0) {
    sort(begin(sccs[cur]), end(sccs[cur]));
    for (int i : sccs[cur]) {
      ret.push_back(i);
    }
    need -= mustVisitCount[cur];
    int nxt = -1;
    for (int v : adjc[cur]) {
      if (countVisit(v) == need) {
        nxt = v;
        break;
      }
    }
    if (need == 0) break;
    cur = nxt;
    if (cur == -1) for (;;);
  }
  return ret;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int T;
  cin >> T;
  while (T--) {
    cin >> n >> m >> k;
    for (int i = 0; i < n; i++) {
      adj[i].clear();
      adjc[i].clear();
      mustVisit[i] = false;
    }
    for (int i = 0; i < k; i++) {
      int x;
      cin >> x;
      x--;
      mustVisit[x] = true;
    }
    for (int i = 0; i < m; i++) {
      int u, v;
      cin >> u >> v;
      u--; v--;
      adj[u].push_back(v);
    }
    fill(num, num + n, -1);
    fill(mustVisitCount, mustVisitCount + n, 0);
    timer = -1;
    sccCount = 0;
    sccs.clear();
    for (int i = 0; i < n; i++) {
      if (num[i] == -1) {
        dfs(i, -1);
      }
    }
    for (int i = 0; i < sccCount; i++) {
      adjc[i].clear();
    }
    for (int u = 0; u < n; u++) {
      for (int v : adj[u]) {
        if (sccID[u] != sccID[v]) {
          adjc[sccID[u]].push_back(sccID[v]);
        }
      }
    }
    fill(memo, memo + n, -1);
    int start = -1;
    for (int i = 0; i < sccCount; i++) {
      int cur = countVisit(i);
      if (cur == k) {
        start = i;
      }
    }
    if (start != -1) {
      auto res = getOrder(start);
      if ((int)res.size() != k) for (;;);
      for (int i = 0; i < k; i++) {
        cout << res[i] + 1 << (i == k - 1 ? '\n' : ' ');
      }
    } else {
      cout << -1 << '\n';
    }
  }
  return 0;
}