#include <bits/stdc++.h>
using namespace std;
const int MAXN = 305;
vector<pair<int, int> > e;
vector<int> b;
int a[MAXN];
bool mark[MAXN], x[MAXN][MAXN];
int n, k, m, cnt;
void add(int u, int v) {
  if (x[u][v]) return;
  cnt++;
  e.push_back(pair<int, int>(u, v));
  x[u][v] = x[v][u] = true;
}
void ghi() {
  for (int i = 0; i < m; i++) printf("%d %d\n", e[i].first, e[i].second);
}
int main() {
  if (0) {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
  };
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= k; i++) scanf("%d", &a[i]), mark[a[i]] = true;
  int nn = n - k;
  if (k == n) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= n; i++)
    if (!mark[i]) b.push_back(i);
  add(a[1], b[0]);
  if (cnt == m) {
    ghi();
    return 0;
  }
  for (int i = 0; i < nn - 1; i++) {
    add(b[i], b[i + 1]);
    if (cnt == m) {
      ghi();
      return 0;
    }
  }
  add(b[nn - 1], a[2]);
  for (int i = 2; i < k; i++) {
    add(a[i], a[i + 1]);
    if (cnt == m) {
      ghi();
      return 0;
    }
  }
  for (int i = 0; i < nn - 1; i++)
    for (int j = i + 1; j < nn; j++) {
      add(b[i], b[j]);
      if (cnt == m) {
        ghi();
        return 0;
      }
    }
  for (int i = 2; i < k; i++)
    for (int j = i + 1; j <= k; j++) {
      add(a[i], a[j]);
      if (cnt == m) {
        ghi();
        return 0;
      }
    }
  for (int i = 0; i < nn; i++)
    for (int j = 2; j <= k; j++) {
      add(b[i], a[j]);
      if (cnt == m) {
        ghi();
        return 0;
      }
    }
  for (int i = 1; i < nn; i++) {
    add(a[1], b[i]);
    if (cnt == m) {
      ghi();
      return 0;
    }
  }
  puts("-1");
  return 0;
}
