#include <bits/stdc++.h>
using namespace std;
typedef struct __Node {
  __Node() : marked(-1), newIndex(-1) {}
  vector<int> arcs;
  int marked;
  int newIndex;
} Node;
Node nodes[301];
bool indices[301];
int main() {
  int N, M, K;
  scanf("%d%d%d", &N, &M, &K);
  if (N == K) {
    printf("-1");
    return 0;
  }
  nodes[0].marked = 0;
  for (int i = 1; i < N; i++) nodes[0].arcs.push_back(i);
  M -= N - 1;
  int a = 1, b = 2;
  nodes[a].marked = 1;
  nodes[b].marked = 1;
  for (int i = 3; i < N - 1; i++) {
    for (int j = i + 1; j < N; j++) {
      if (M <= 0) goto endLoop1;
      nodes[i].arcs.push_back(j);
      M--;
    }
  }
endLoop1:;
  int counter = 1;
  for (int i = 3; i < N; i++) {
    if (M <= 0) break;
    nodes[a].arcs.push_back(i);
    M--;
  }
  for (int i = 3; i < N; i++) {
    if (M <= 0) break;
    nodes[b].arcs.push_back(i);
    M--;
    counter++;
    nodes[i].marked = 0;
    if (counter > N - K) {
      printf("-1");
      return 0;
    }
  }
  if (M > 0) {
    printf("-1");
    return 0;
  }
  int count = 0, pos = 0, ct = 0;
  for (int i = 0; i < N; i++)
    if (nodes[i].marked == 1) count++;
  for (int i = 0; i < K - count; i++) {
    while (nodes[pos].marked != -1) pos++;
    nodes[pos].marked = 1;
    ct++;
  }
  assert(ct + count == K);
  for (int i = 0; i < N; i++) indices[i] = false;
  for (int i = 0; i < K; i++) {
    int x;
    scanf("%d", &x);
    indices[x] = true;
  }
  int assigned = 0;
  for (int i = 1; i <= N; i++) {
    if (indices[i]) {
      if (assigned == 0) {
        nodes[a].newIndex = i;
        assigned++;
      } else if (assigned == 1) {
        nodes[b].newIndex = i;
        assigned++;
      } else {
        for (int j = 0; j < N; j++)
          if (nodes[j].marked == 1 && nodes[j].newIndex == -1) {
            nodes[j].newIndex = i;
            break;
          }
      }
    } else {
      for (int j = 0; j < N; j++)
        if (nodes[j].marked < 1 && nodes[j].newIndex == -1) {
          nodes[j].newIndex = i;
          break;
        }
    }
  }
  for (int i = 0; i < N; i++)
    for (int j = 0; j < nodes[i].arcs.size(); j++)
      printf("%d %d\n", nodes[nodes[i].arcs[j]].newIndex, nodes[i].newIndex);
}
