#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void bfs(vector<vector<int>>& adj, int start){
    vector<bool> visted(adj.size(),false);
    queue<int> q;
    q.push(start);
    visted[start]=true;
    while(!q.empty()){
        int u=q.front();
        q.pop();
        cout<<u<<endl;
        for(int v: adj[u]){
            if(!visted[v]){
                visted[v]=true;
                q.push(v);
            }
        }
    }
}
void dfs(vector<bool>& visted, vector<vector<int>> adj, int s){
    for(int u: adj[s]){
        if(!visted[u]){
            visted[u]=true;
            dfs(visted,adj,u);
        }
    }
}
int main()
{
    int t; scanf("%d",&t);
    while(t--){
        int n,m,s;
        scanf("%d %d %d",&n,&m,&s);
        vector<int> mars(s);
        for(int i=0;i<s;i++) scanf("%d",&mars[i]);
        vector<pair<int,int>> ulaz;
        vector<vector<int>> adj(n+1);
        for(int i=0;i<m;i++){
            int a,b;
            scanf("%d %d",&a,&b);
            adj[a].push_back(b);
            adj[b].push_back(a);
            ulaz.push_back({a,b});
        }
        /*if(m==n-1){
            for(int i=0;i<ulaz.size();i++){
                printf("%d %d\n",ulaz[i].first,ulaz[i].second);
            }
        }*/
        ll sum=0;
        bool ok=true;//prvi slucaj
        for(int i=0;i<s;i++){
            sum+=adj[mars[i]].size()-1;
            if(adj[mars[i]].size()>1)
                ok=false;
        }
        if(m-sum<n-1)
            printf("-1");
        else{
            printf("%d\n",m);
            for(int i=0;i<ulaz.size();i++){
                printf("%d %d\n",ulaz[i].first,ulaz[i].second);
            }
        }
    }
    return 0;
}
/*
1
5 4 2
2 3
1 2
2 3
3 4
3 5
*/