#include <bits/stdc++.h>
using namespace std;
const double EPS = 0.0000001;
const double PI = acos(-1);
const long long INFLL = 0x7FFFFFFFFFFFFFFF;
const int INF = 0x7FFFFFFF;
template <typename T>
inline void next(T &num) {
  char c;
  num = 0;
  do {
    c = getchar_unlocked();
  } while (c != EOF && c == ' ' && c == '\n' && c == '\t');
  int sign = (c == '-' ? -1 : 1);
  if (c != '-') num += (c - '0');
  while ((c = getchar_unlocked()) != EOF && c != '\n' && c != '\t' &&
         c != ' ') {
    num *= 10;
    num += (c - '0');
  }
  num *= sign;
}
int n, k, m, node[305];
bitset<305> mark;
int main() {
  scanf("%d%d%d", &n, &m, &k);
  if (k == n || m > n * (n - 1) / 2 - k + 1) {
    printf("-1");
    return 0;
  }
  int cnt = n;
  for (int i = int(0), _b = int(k - 1); i <= _b; ++i) {
    scanf("%d", &node[--cnt]);
    mark[node[cnt]] = 1;
  }
  for (int i = int(n), _b = int(1); i >= _b; --i)
    if (!mark[i]) node[--cnt] = i;
  for (int i = int(1), _b = int(n - 1); i <= _b; ++i)
    printf("%d %d\n", node[0], node[i]);
  m -= n - 1;
  for (int i = int(1), _b = int(n - 2); i <= _b; ++i) {
    for (int j = int(1), _b = int(i - 1); j <= _b; ++j) {
      if (!m) return 0;
      printf("%d %d\n", node[j], node[i]);
      m--;
    }
  }
  for (int i = int(1), _b = int(n - k - 1); i <= _b; ++i) {
    if (!m) return 0;
    printf("%d %d\n", node[n - 1], node[i]);
    m--;
  }
  return 0;
}
