#include <bits/stdc++.h>
using namespace std;
int g[320][320];
bool mark[320];
int n, m, k;
int a[320];
bool vis[320];
int main() {
  while (scanf("%d%d%d", &n, &m, &k) != EOF) {
    memset(mark, 0, sizeof mark);
    memset(g, 0, sizeof g);
    for (int i = 1; i <= k; ++i) {
      int x;
      scanf("%d", &x);
      mark[x] = 1;
    }
    if (k == n || m == n * (n - 1) / 2) {
      puts("-1");
      continue;
    }
    memset(vis, 0, sizeof vis);
    memset(a, -1, sizeof a);
    int cnt = 2;
    for (int i = 1; i <= n; ++i) {
      if (mark[i] == 0) {
        if (a[2] == -1) {
          a[2] = i;
          vis[i] = 1;
        }
      }
      if (mark[i] == 1) {
        if (a[1] == -1) {
          a[1] = i;
          vis[i] = 1;
        }
      }
    }
    for (int i = 1; i <= n; ++i) {
      if (vis[i]) continue;
      a[++cnt] = i;
    }
    for (int i = 1; i < n; ++i) {
      g[a[i]][a[i + 1]] = g[a[i + 1]][a[i]] = 1;
      --m;
    }
    for (int i = 2; i <= n && m > 0; ++i) {
      for (int j = i + 2; j <= n && m > 0 && !g[a[i]][a[j]]; ++j) {
        --m;
        g[a[i]][a[j]] = g[a[j]][a[i]] = 1;
      }
    }
    for (int i = 3; i <= n && m > 0; ++i) {
      if (mark[a[i]] == 0) {
        --m;
        g[a[1]][a[i]] = g[a[i]][a[1]] = 1;
      }
    }
    if (m > 0) {
      puts("-1");
      continue;
    }
    for (int i = 1; i <= n; ++i) {
      for (int j = i + 1; j <= n; ++j) {
        if (g[i][j]) printf("%d %d\n", i, j);
      }
    }
  }
  return 0;
}
