#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:66777216")
using namespace std;
const int N = 307;
int n, k, m, a[N];
int main() {
  cin >> n >> m >> k;
  if (n == k) {
    puts("-1");
    return 0;
  }
  vector<bool> A(n + 1, false);
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    A[a[i]] = true;
  }
  int v;
  for (v = 1; A[v]; ++v)
    ;
  vector<pair<int, int> > ans;
  int t = a[0];
  vector<int> rest;
  for (int i = 1; i <= n; ++i)
    if (i != t && i != v) rest.push_back(i);
  ans.push_back(make_pair(t, v));
  for (int i = 0; i < (int)(rest).size(); ++i)
    ans.push_back(make_pair(rest[i], v));
  int i = 0;
  int j = 1;
  while (i < (int)(rest).size() && j < (int)(rest).size() &&
         (int)(ans).size() != m) {
    ans.push_back(make_pair(rest[i], rest[j]));
    ++j;
    if (j == (int)(rest).size()) {
      ++i;
      j = i + 1;
    }
  }
  vector<int> good;
  for (int i = 1; i <= n; ++i)
    if (!A[i] && i != v) good.push_back(i);
  i = 0;
  while (i < (int)(good).size() && (int)(ans).size() != m) {
    ans.push_back(make_pair(t, good[i]));
    ++i;
  }
  if ((int)(ans).size() != m)
    puts("-1");
  else {
    for (int i = 0; i < m; ++i)
      cout << ans[i].first << " " << ans[i].second << endl;
  }
  return 0;
}
