#include <bits/stdc++.h>
const int MAXN = 300 + 5;
bool adj[MAXN][MAXN], is[MAXN];
int mark[MAXN];
void no() {
  puts("-1");
  exit(0);
}
void yes(int N, int M) {
  for (int i = 1; i <= N; ++i)
    for (int j = i + 1; j <= N; ++j)
      if (adj[i][j]) printf("%d %d\n", i, j);
  exit(0);
}
int main() {
  int N, M, K, e = 0;
  scanf("%d %d %d", &N, &M, &K);
  if (N == K || M > N * (N - 1) / 2 - K + 1) no();
  for (int i = 1; i <= K; ++i) {
    scanf("%d", mark + i);
    is[mark[i]] = true;
  }
  for (int i = 1; i <= N; ++i)
    for (int j = i + 1; j <= N; ++j)
      if ((i != mark[1] || !is[j]) && (j != mark[1] || !is[i])) {
        adj[i][j] = true;
        e++;
      }
  int unmarked = -1;
  for (int i = 1; i <= N; ++i)
    if (!is[i]) {
      unmarked = i;
      break;
    }
  while (e > M) {
    for (int i = 1; i <= N; ++i) {
      for (int j = i + 1; j <= N; ++j) {
        if (!adj[i][j]) continue;
        if (e == M)
          yes(N, M);
        else if (i != unmarked && j != unmarked) {
          adj[i][j] = false;
          e--;
        }
      }
    }
  }
  yes(N, M);
}
