#include <bits/stdc++.h>
using namespace std;
int id[303];
bool isold[301][301];
void init() {
  memset(isold, 0, sizeof isold);
  for (int i = 0; i < 303; i++) id[i] = i;
}
int root(int i) {
  while (i != id[i]) {
    id[i] = id[id[i]];
    i = id[i];
  }
  return i;
}
vector<pair<int, int> > out;
void U(int i, int j) {
  int a = i;
  int b = j;
  i = root(i);
  j = root(j);
  if (i != j) {
    out.push_back(make_pair(a, b));
    isold[a][b] = 1;
    isold[b][a] = 1;
    id[i] = j;
  }
}
vector<int> a;
bitset<303> bits;
int n, m, k, x;
bool inTheGraph[333];
bool isbad(int i, int j) {
  if (i == j) return 1;
  if (isold[i][j]) return 1;
  if (i == x && bits[j]) return 1;
  if (j == x && bits[i]) return 1;
  isold[i][j] = 1;
  isold[j][i] = 1;
  inTheGraph[i] = 1;
  inTheGraph[j] = 1;
  return 0;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  a.resize(n);
  bits &= 0;
  for (int i = 0; i < k; i++) {
    scanf("%d", &a[i]);
    a[i]--;
    bits[a[i]] = 1;
  }
  x = a[0];
  vector<pair<int, int> > ans;
  int it = 5;
  inTheGraph[x] = 1;
  while (it--) {
    for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
        if (isbad(i, j)) continue;
        if (inTheGraph[i] || inTheGraph[j]) ans.push_back(make_pair(i, j));
      }
    }
  }
  if (ans.size() < m || k == n) {
    puts("-1");
  } else {
    init();
    for (int i = 0; i < ans.size(); i++) {
      U(ans[i].first, ans[i].second);
    }
    for (int i = 0; i < ans.size(); i++) {
      if (isold[ans[i].first][ans[i].second]) continue;
      out.push_back(ans[i]);
    }
    for (int i = 0; i < m; i++) {
      printf("%d %d\n", ++out[i].first, ++out[i].second);
    }
  }
}
