#include <bits/stdc++.h>
using namespace std;
int n, m, k, edge[555];
bool f[555], mang[555][555];
void solve() {
  int a, s = 0, i, pick, j, chose;
  memset(mang, true, sizeof(mang));
  for (i = 1; i <= n; i++)
    if (f[i] == false) {
      a = i;
      break;
    }
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++)
      if (mang[i][j]) s++;
  for (i = 1; i <= n; i++) edge[i] = n - 1;
  for (i = 1; i <= n; i++)
    if (f[i]) {
      pick = i;
      break;
    }
  mang[pick][a] = false;
  s--;
  mang[a][pick] = false;
  edge[a]--;
  edge[pick]--;
  if (s < m) {
    cout << -1;
    return;
  }
  for (i = 1; i <= n; i++)
    if ((i != a) && (i != pick)) chose = i;
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++)
      if ((mang[i][j]) && (s > m)) {
        if ((edge[i] == 1) || (edge[j] == 1)) continue;
        edge[i]--;
        edge[j]--;
        if ((i == a) && (j == chose)) continue;
        if ((i == chose) && (j == a)) continue;
        if ((i == pick) && (j == chose)) continue;
        if ((i == chose) && (j == pick)) continue;
        mang[i][j] = false;
        s--;
      }
  for (i = 1; i <= n; i++)
    if (edge[i] < 1) {
      cout << -1;
      return;
    }
  if (s > m) {
    cout << -1;
    return;
  }
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++)
      if (mang[i][j]) printf("%d %d\n", i, j);
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  int i, j, x, a, pick, dem = 0;
  memset(f, true, sizeof(f));
  for (i = 1; i <= k; i++) {
    scanf("%d", &x);
    f[x] = false;
  }
  if (k == n) {
    cout << -1;
    return 0;
  }
  if (k == 1) {
    solve();
    return 0;
  }
  for (i = 1; i <= n; i++)
    if (f[i] == false) {
      a = i;
      break;
    }
  int s = 0;
  memset(mang, false, sizeof(mang));
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++) {
      mang[i][j] = true;
      s++;
    }
  for (i = 1; i <= n; i++) edge[i] = n - 1;
  for (i = 1; i <= n; i++)
    if (mang[i][a] || mang[a][i]) {
      mang[a][i] = false;
      mang[i][a] = false;
      s--;
      edge[i]--;
      edge[a]--;
    }
  for (i = 1; i <= n; i++)
    if (f[i]) {
      mang[i][a] = true;
      mang[a][i] = true;
      s++;
      edge[i]++;
      edge[a]++;
    }
  if (s < m) {
    cout << -1;
    return 0;
  }
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++)
      if ((mang[i][j]) && (f[i] == false) && (f[j] == false) && (s > m)) {
        if ((edge[i] == 1) || (edge[j] == 1)) continue;
        edge[i]--;
        edge[j]--;
        mang[i][j] = false;
        s--;
        mang[j][i] = false;
      }
  if (s > m) {
    for (i = 1; i <= n; i++)
      if (f[i]) {
        pick = i;
        break;
      }
    for (i = 1; i <= n; i++)
      if ((f[i]) && (i != pick))
        for (j = 1; j <= n; j++)
          if ((mang[i][j] || mang[j][i]) && (i != j) && (s > m)) {
            if ((edge[i] == 1) || (edge[j] == 1)) continue;
            edge[i]--;
            edge[j]--;
            mang[i][j] = false;
            mang[j][i] = false;
            s--;
          }
    if (s > m) {
      for (j = 1; j <= n; j++)
        if (f[j] == false) dem++;
      for (j = 1; j <= n; j++)
        if ((j != a) && (s > m) && (j != pick) &&
            (mang[j][pick] || mang[pick][j])) {
          if ((edge[pick] == 1) || (edge[j] == 1)) continue;
          edge[pick]--;
          edge[j]--;
          if ((f[j] == false) && (dem == 2)) continue;
          if (f[j] == false) dem--;
          s--;
          mang[pick][j] = false;
          mang[j][pick] = false;
        }
    }
  }
  for (i = 1; i <= n; i++)
    if (edge[i] < 1) {
      cout << -1;
      return 0;
    }
  if (s > m) {
    cout << -1;
    return 0;
  }
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++)
      if (mang[i][j]) printf("%d %d\n", i, j);
  return 0;
}
