#include <bits/stdc++.h>
using namespace std;
int a[310], g[310][310], use[310];
int tm;
void add(int x, int y) {
  g[x][y] = g[y][x] = 1;
  tm++;
}
int main() {
  int n, m, K;
  scanf("%d%d%d", &n, &m, &K);
  for (int i = 0; i < K; i++) {
    scanf("%d", &a[i]);
    use[a[i]] = 1;
  }
  sort(a, a + K);
  memset(g, 0, sizeof(g));
  int ck = -1;
  for (int i = 1; i <= n; i++)
    if (!use[i]) ck = i;
  if (ck == -1) {
    puts("-1");
    return 0;
  }
  tm = 0;
  add(a[0], ck);
  add(ck, a[1]);
  for (int i = 1; i < K - 1; i++) add(a[i], a[i + 1]);
  int pre = a[K - 1];
  for (int i = 1; i <= n; i++) {
    if (use[i]) continue;
    if (i == ck) continue;
    add(pre, i);
    pre = i;
  }
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      if (g[i][j] == 1) continue;
      if (tm == m) continue;
      if (i == a[0] && j == a[1]) continue;
      if (i == a[0] || j == a[0]) {
        int ti;
        if (i == a[0])
          ti = j;
        else
          ti = i;
        if (use[ti] && g[ti][a[1]]) continue;
      }
      if (i == a[1] || j == a[1]) {
        int ti;
        if (i == a[1])
          ti = j;
        else
          ti = i;
        if (use[ti] && g[ti][a[0]]) continue;
      }
      add(i, j);
    }
  if (tm != m) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      if (g[i][j]) printf("%d %d\n", i, j);
  return 0;
}
