#include <bits/stdc++.h>
using namespace std;
int INP, AM, REACHEOF;
const int BUFSIZE = (1 << 12) + 17;
char BUF[BUFSIZE + 1], *inp = BUF;
const int MN = 333;
int n, m, k, good[MN], c[MN][MN], d[MN][MN], ke[MN][MN], x[MN], bad;
void solve2() {
  int left = x[1];
  int has = 0;
  for (int i = (1), _b = (n); i <= _b; i++)
    if (i != bad) {
      ke[i][bad] = ke[bad][i] = 1;
      ++has;
      cout << i << ' ' << bad << endl;
      if (has == m) return;
    };
  for (int i = (1), _b = (n); i <= _b; i++)
    for (int j = (i + 1), _b = (n); j <= _b; j++)
      if (i != left && i != bad)
        if (j != left && j != bad) {
          ke[i][j] = ke[j][i] = 1;
          ++has;
          cout << i << ' ' << j << endl;
          if (has == m) return;
        };
  for (int i = (1), _b = (n); i <= _b; i++)
    if (!good[i] && i != bad) {
      ke[left][i] = ke[i][left] = 1;
      ++has;
      cout << left << ' ' << i << endl;
      if (has == m) return;
    };
}
int main() {
  ios ::sync_with_stdio(false);
  while (cin >> n >> m >> k) {
    memset(good, false, sizeof good);
    for (int i = (1), _b = (k); i <= _b; i++) cin >> x[i], good[x[i]] = true;
    if (k == n) {
      cout << -1 << endl;
      continue;
    }
    int gh;
    gh = (n - 2) * (n - 3) / 2 + n - 2 + n - k;
    if (m > gh || m < 2) {
      cout << -1 << endl;
      continue;
    }
    bad = 1;
    while (good[bad]) ++bad;
    memset(ke, 0, sizeof ke);
    solve2();
    continue;
    for (int i = (1), _b = (n); i <= _b; i++)
      for (int j = (1), _b = (n); j <= _b; j++)
        if (i == j)
          c[i][j] = 0;
        else if (ke[i][j])
          c[i][j] = c[j][i] = 1;
        else
          c[i][j] = 1000111000;
    for (int i = (1), _b = (n); i <= _b; i++)
      for (int j = (1), _b = (n); j <= _b; j++) d[i][j] = c[i][j];
    for (int t = (1), _b = (k); t <= _b; t++) {
      int v = x[t];
      for (int i = (1), _b = (n); i <= _b; i++)
        for (int j = (1), _b = (n); j <= _b; j++)
          c[i][j] = min(c[i][j], c[i][v] + c[v][j]);
    }
    for (int t = (1), _b = (n); t <= _b; t++) {
      for (int i = (1), _b = (n); i <= _b; i++)
        for (int j = (1), _b = (n); j <= _b; j++)
          d[i][j] = min(d[i][j], d[i][t] + d[t][j]);
    }
    bool ok = false;
    for (int i = (1), _b = (n); i <= _b; i++)
      for (int j = (1), _b = (n); j <= _b; j++)
        if (c[i][j] != d[i][j]) {
          ok = true;
        }
    if (!ok) cout << ":(\n";
  }
  return 0;
}
