#include <bits/stdc++.h>
using namespace std;
const int inv = 1000000000;
const int minv = -inv;
const int max_n = 100010;
int n, m, k, r;
int a[max_n];
bool marked[max_n] = {0};
vector<pair<int, int> > edges;
int main() {
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &k);
  r = n - k;
  for (int i = 0; i < k; ++i) {
    scanf("%d", &a[i]);
    --a[i];
    marked[a[i]] = true;
  }
  if (r == 0) {
    printf("%d\n", -1);
    return 0;
  }
  if (((n - 1) * (n - 2) / 2) + r < m) {
    printf("%d\n", -1);
    return 0;
  }
  int knotmarked;
  int notmarked;
  for (int i = 0; i < n; ++i) {
    if (marked[i])
      knotmarked = i;
    else
      notmarked = i;
  }
  for (int i = 0; i < n; ++i)
    if (i != notmarked) edges.push_back(pair<int, int>(notmarked + 1, i + 1));
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < i; ++j) {
      if (i == notmarked or j == notmarked) continue;
      if (i == knotmarked and marked[j]) continue;
      if (j == knotmarked and marked[i]) continue;
      edges.push_back(pair<int, int>(i + 1, j + 1));
    }
  for (int i = 0; i < m; ++i) {
    printf("%d ", edges[i].first);
    printf("%d\n", edges[i].second);
  }
  return 0;
}
