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

void solve(){
    int n, m, s;
    cin >> n >> m >> s;
    vector<vector<int>> graf(n + 1);
    vector<bool> nis(n + 1, false);

    for(int i = 0; i < s; i++){
        int tr;
        cin >> tr;
        nis[tr] = true;
    }

    for(int i = 0; i < m; i++){
        int a, b;
        cin >> a >> b;
        bool dodaj = true;
        if((nis[a]) & (nis[b])){
            dodaj = false;
        }
        if((nis[a]) && (graf[a].size() > 0)){
            dodaj = false;
        }
        if((nis[b] && (graf[b].size() > 0))){
            dodaj = false;
        }
        if(dodaj){
            graf[a].push_back(b);
            graf[b].push_back(a);
        }
    }
/*
    cout << endl;
    for(int i = 1; i <= n; i++){
        for(int slnode : graf[i]){
            if(i < slnode){
                cout << i << " " << slnode << endl;
            }
        }
    }
    cout << endl;
*/
    vector<bool> mark(n + 1, false);

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

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

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

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

    }

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

    int suma = 0;

    for(int node = 1; node <= n; node++){
        map<int, bool> ugrozeni;
        for(int slnode : brisi[node]){
            ugrozeni[slnode] = true;
        }
        for(int slnode : graf[node]){
            if(node < slnode){
                if(!ugrozeni[slnode]){
                   suma++;
                }
            }
        }
    }


    cout << suma << endl;

    for(int node = 1; node <= n; node++){
        map<int, bool> ugrozeni;
        for(int slnode : brisi[node]){
            ugrozeni[slnode] = true;
        }
        for(int slnode : graf[node]){
            if(node < slnode){
                if(!ugrozeni[slnode]){
                    cout << node << " " << slnode << 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;
}