#include <bits/stdc++.h>
using namespace std;
static const int INF = 500000000;
template <class T>
void debug(T a, T b) {
  for (; a != b; ++a) cerr << *a << ' ';
  cerr << endl;
}
int n, m, k;
int mark[305];
struct uf {
  int par[305];
  uf() { memset(par, -1, sizeof(par)); }
  int root(int a) {
    if (par[a] == -1) return a;
    return par[a] = root(par[a]);
  }
  void unite(int a, int b) {
    a = root(a);
    b = root(b);
    if (a == b) return;
    par[a] = b;
  }
};
uf u;
pair<int, int> es[100005];
int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < k; ++i) {
    int a;
    cin >> a;
    --a;
    mark[a] = 1;
  }
  if (k == n || m >= n * (n - 1) / 2 - k + 2)
    puts("-1");
  else {
    int unm;
    for (int i = 0; i < n; ++i)
      if (!mark[i]) unm = i;
    int a = -1, b = -1;
    for (int i = 0; i < n; ++i)
      if (mark[i] && unm != i) a = i;
    if (a == -1)
      for (int i = 0; i < n; ++i)
        if (unm != i) a = i;
    for (int i = 0; i < n; ++i)
      if (mark[i] && unm != i && a != i) b = i;
    if (b == -1)
      for (int i = 0; i < n; ++i)
        if (unm != i && a != i) b = i;
    u.unite(a, unm);
    u.unite(b, unm);
    int cnt = 0;
    es[cnt++] = make_pair(a, unm);
    es[cnt++] = make_pair(unm, b);
    for (int i = 0; i < n; ++i)
      if (u.root(i) != u.root(unm)) {
        es[cnt++] = make_pair(i, unm);
        u.unite(i, unm);
      }
    for (int i = 0; i < n; ++i)
      for (int j = 0; j < i; ++j)
        if (i != unm && i != a && i != b && j != unm && j != a && j != b) {
          es[cnt++] = make_pair(i, j);
        }
    for (int i = 0; i < n; ++i)
      if (i != unm && i != a && i != b) {
        if (!mark[i]) {
          es[cnt++] = make_pair(a, i);
          es[cnt++] = make_pair(i, b);
        }
        if (mark[i]) es[cnt++] = make_pair(a, i);
      }
    for (int i = 0; i < m; ++i)
      printf("%d %d\n", es[i].first + 1, es[i].second + 1);
  }
  return 0;
}
