#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 111;
int n, m, k;
int a;
bool f[N];
bool g[N];
vector<pair<int, int> > cao;
void work() {
  int i, j;
  cin >> n >> m >> k;
  for (i = 0; i < k; i++) {
    scanf("%d", &a);
    f[a] = 1;
  }
  int tp;
  int re = n - k;
  int fk = max(0, 2 - k);
  re -= fk + 1;
  if (k == n || (m > n * (n - 1) / 2 + 2 - n + re)) {
    puts("-1");
    return;
  }
  for (i = 1; i <= n; i++)
    if (!f[i]) {
      tp = i;
      break;
    }
  int x = -1, y = -1;
  for (i = 1; i <= n; i++) {
    if (f[i]) {
      if (x == -1)
        x = i;
      else if (y == -1)
        y = i;
    }
  }
  for (i = 1; i <= n; i++) {
    if (!f[i] && tp != i) {
      if (x == -1)
        x = i;
      else if (y == -1)
        y = i;
    }
  }
  if (x > y) swap(x, y);
  printf("%d %d\n", x, tp);
  printf("%d %d\n", y, tp);
  m -= 2;
  memset(g, 0, sizeof(g));
  g[x] = 1;
  g[y] = 1;
  g[tp] = 1;
  int s1, s2;
  for (i = 1; i <= n; i++) {
    if (!g[i]) {
      s1 = y;
      s2 = i;
      if (s1 > s2) swap(s1, s2);
      cao.push_back(make_pair(s1, s2));
      m--;
      printf("%d %d\n", s1, s2);
    }
  }
  if (m == 0) return;
  for (i = 1; i <= n; i++) {
    for (j = i + 1; j < n + 1; j++) {
      if (i == x && j == y) continue;
      if ((i == x && j == tp) || (i == tp && j == x)) continue;
      if ((i == y && j == tp) || (i == tp && j == y)) continue;
      if ((i == x && f[j]) || (j == x && f[i])) continue;
      if (binary_search(cao.begin(), cao.end(), make_pair(i, j))) continue;
      printf("%d %d\n", i, j);
      m--;
      if (m == 0) return;
    }
  }
}
int main() {
  work();
  return 0;
}
