#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long int lint;

void dfs(vector<set<int>>& graf, vector<bool>& mark, vector<bool>& mark2, int node){
    for(int slnode : graf[node]){
        if(!mark[slnode]){
            mark2[slnode] = true;
            mark[slnode] = true;
            dfs(graf, mark, mark2, slnode);
            mark[slnode] = false;
        }
    }
}

void solve(){
    int n, m, s;
    cin >> n >> m >> s;
    vector<set<int>> graf(n + 1);
    set<int> nis;
    for(int i = 0; i < s; i++){
        int tr;
        cin >> tr;
        nis.insert(tr);
    }
    for(int i = 0; i < m; i++){
        int a, b;
        cin >> a >> b;
        graf[a].insert(b);
        graf[b].insert(a);
    }
    for(int node : nis){
        while(graf[node].size() > 1){
            for(int slnode : graf[node]){
                graf[node].erase(slnode);
                graf[slnode].erase(node);
                break;
            }
        }
    }
    vector<bool> mark(n + 1, false);




    int prvi = 1;
    for(int i = 1; i <= n; i++){
        if(graf[i].size() == 1){
            prvi = i;
        }
    }

/*
    cout << endl;
    for(int i = 1; i <= n; i++){
        for(int j : graf[i]){
            if(i < j){
                cout << i << " " << j << endl;
            }
        }
    }
    cout << endl;

    cout << prvi << endl << endl;
*/
    vector<bool> odradjeni(n + 1, false);
    mark[prvi] = true;
    queue<int> red;
    red.push(prvi);

    vector<pair<int, int>> brisi;
    while(!red.empty()){
        int node = red.front();
        red.pop();
        odradjeni[node] = true;

        for(int slnode : graf[node]){
            if(!odradjeni[slnode]){
                if(mark[slnode]){
                    brisi.push_back({node, slnode});
                }
                else{
                    red.push(slnode);
                    mark[slnode] = true;
                }
            }
        }

    }

    for(int tr = 0; tr < brisi.size(); tr++){
        int p = brisi[tr].first;
        int q = brisi[tr].second;
        graf[p].erase(q);
        graf[q].erase(p);
    }

    for(int i = 1; i <= n; i++){
        if(!mark[i]){
            cout << -1 << endl;
            return;
        }
    }

    int suma = 0;
    for(int i = 1; i <= n; i++){
        for(int j : graf[i]){
            if(i < j){
                suma++;
            }
        }
    }

    if(suma != (n - 1)){
        while(true){

        }
    }

    cout << suma << endl;

    for(int i = 1; i <= n; i++){
        for(int j : graf[i]){
            if(i < j){
                cout << i << " " << j << endl;
            }
        }
    }
}



signed main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int t = 1;
    cin >> t;
    while(t--){
        solve();
    }
    return 0;
}
/*
5 6 1
5
1 2
1 3
2 3
2 4
3 4
4 5



*/