#include <bits/stdc++.h>
const int maxn = 330;
int n, m, k;
int A[maxn];
int used[maxn];
int main() {
  while (~scanf("%d%d%d", &n, &m, &k)) {
    memset(used, 0, sizeof(used));
    for (int i = 0; i < k; ++i) {
      scanf("%d", &A[i]);
      used[A[i]] = 1;
    }
    int li = (n - 3) * (n - 4) / 2 + 2 * (n - 3) + 2 + n - k - 1;
    if (n == k || m > li) {
      puts("-1");
      continue;
    }
    int x;
    for (int i = 1; i <= n; ++i)
      if (!used[i]) {
        x = i;
        break;
      }
    int a = A[0], b = A[1];
    int tot = 0;
    printf("%d %d\n", a, x);
    printf("%d %d\n", b, x);
    tot += 2;
    for (int i = 1; i <= n && tot < m; ++i) {
      if (i == a || i == b || i == x) continue;
      printf("%d %d\n", i, x);
      tot++;
    }
    for (int i = 1; i <= n && tot < m; ++i)
      for (int j = i + 1; j <= n && tot < m; ++j) {
        if (i == a || i == b || j == a || j == b || i == x || j == x) continue;
        printf("%d %d\n", i, j);
        tot++;
      }
    for (int i = 1; i <= n && tot < m; ++i) {
      if (i == a || i == b || i == x) continue;
      printf("%d %d\n", i, a);
      tot++;
    }
    for (int i = 1; i <= n && tot < m; ++i)
      if (!used[i] && i != x) {
        printf("%d %d\n", i, b);
        tot++;
      }
  }
}
