#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000,100000000000")
using namespace std;
const long long inf = 1e18 + 7;
const long long mod = 1e9 + 7;
const double eps = 1e-12;
const double PI = 2 * acos(0.0);
const double E = 2.71828;
int a[305];
bool used[305];
vector<pair<int, int> > q;
int main(void) {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (long long(i) = 0; (i) < (long long)(k); (i)++)
    scanf("%d", a + i), a[i]--;
  if (k == n) {
    puts("-1");
    exit(0);
  }
  for (long long(i) = 0; (i) < (long long)(k); (i)++) used[a[i]] = true;
  int v = 0;
  for (long long(i) = 0; (i) < (long long)(n); (i)++)
    if (!used[i]) {
      v = i;
      break;
    }
  int x = a[0], y = a[1];
  q.push_back(make_pair(v, x));
  q.push_back(make_pair(v, y));
  for (long long(i) = 0; (i) < (long long)(n); (i)++)
    if (i != x && i != y && i != v) q.push_back(make_pair(x, i));
  for (long long(i) = 0; (i) < (long long)(n); (i)++)
    for (long long(j) = 0; (j) < (long long)(i); (j)++)
      if (i != x && j != y && j != x && i != y) {
        q.push_back(make_pair(j, i));
      }
  for (long long(i) = 0; (i) < (long long)(n); (i)++)
    if (!used[i] && i != v) {
      q.push_back(make_pair(i, y));
    }
  if (q.size() < m) {
    puts("-1");
    exit(0);
  }
  for (long long(i) = 0; (i) < (long long)(m); (i)++)
    printf("%d %d\n", q[i].first + 1, q[i].second + 1);
  return 0;
}
