#include <bits/stdc++.h>
using namespace std;
const int N = 310;
int n, m, k;
bool noe[N][N];
vector<pair<int, int> > e;
int a[N];
void add(int x, int y) {
  e.push_back(make_pair(x, y));
  noe[x][y] = 1;
  noe[y][x] = 1;
}
void noedge(int x, int y) { noe[x][y] = noe[y][x] = 1; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < k; ++i) scanf("%d", a + i);
  if (k == n) return puts("-1"), 0;
  int x = a[0], y = a[1];
  vector<bool> vis(n + 1, 0);
  for (int i = 0; i < k; ++i) vis[a[i]] = 1;
  int fst = -1;
  for (int i = 1; i <= n; ++i)
    if (!vis[i]) {
      fst = i;
      break;
    }
  assert(fst != -1);
  noedge(x, y);
  add(x, fst);
  add(y, fst);
  for (int i = 2; i < k; ++i) noedge(a[i], y);
  for (int i = 1; i <= n; ++i)
    if (i != y && i != fst && i != x) {
      add(x, i);
    }
  for (int i = 1; i <= n; ++i) {
    for (int j = i + 1; j <= n; ++j) {
      if (!noe[i][j] && e.size() < m) add(i, j);
    }
  }
  if (e.size() == m) {
    for (auto p : e) {
      printf("%d %d\n", p.first, p.second);
    }
  } else {
    puts("-1");
  }
  return 0;
}
