#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int a[303];
int b[303];
int c[303];
int g[303][303];
inline void dfs(int v) {
  c[v] = 1;
  for (int i = 0; i < n; ++i)
    if (!c[i] && g[v][i]) {
      printf("%d %d\n", v + 1, i + 1);
      g[v][i] = g[i][v] = 0;
      --m;
      dfs(i);
    }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < k; ++i) {
    scanf("%d", &a[i]);
    --a[i];
    b[a[i]] = 1;
  }
  int M = n * (n - 1) / 2;
  if (k == n || M - (k - 1) < m) {
    printf("-1\n");
    return 0;
  }
  int ind1 = -1;
  for (int i = 0; i < n && ind1 == -1; ++i)
    if (b[i]) ind1 = i;
  int ind2 = -1;
  for (int i = 0; i < n && ind2 == -1; ++i)
    if (b[i] && i != ind1) ind2 = i;
  for (int i = 0; i < n; ++i) {
    if (i == ind1) {
      for (int j = 0; j < n; ++j)
        if (i != j && j != ind2) g[i][j] = 1;
    } else if (i == ind2) {
      for (int j = 0; j < n; ++j)
        if (i != j && !b[j]) g[i][j] = 1;
    } else if (!b[i]) {
      for (int j = 0; j < n; ++j)
        if (i != j) g[i][j] = 1;
    } else {
      for (int j = 0; j < n; ++j)
        if (i != j && j != ind2) g[i][j] = 1;
    }
  }
  dfs(0);
  for (int i = 0; i < n && m; ++i)
    for (int j = i + 1; j < n && m; ++j)
      if (g[i][j]) {
        printf("%d %d\n", i + 1, j + 1);
        --m;
      }
  return 0;
}
