#include <bits/stdc++.h>
using namespace std;
bool marked[300];
set<pair<int, int> > edges;
int main(void) {
  int n, m, k;
  cin >> n >> m >> k;
  if (k == n || m == n * (n - 1) / 2) {
    cout << -1 << endl;
    return 0;
  }
  int start = -1;
  for (int i = 0; i < k; i++) {
    int p;
    cin >> p;
    p--;
    if (start == -1) start = p;
    marked[p] = true;
  }
  for (int i = 0; i < n; i++) {
    if (!marked[i]) {
      edges.insert(make_pair(start, i));
      for (int j = 0; j < n; j++) {
        if (j != i && j != start) edges.insert(make_pair(i, j));
      }
      break;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (edges.size() == m) break;
      if (!((i == start && marked[j]) || (j == start && marked[i])))
        if (edges.find(make_pair(j, i)) == edges.end())
          edges.insert(make_pair(i, j));
    }
    if (edges.size() == m) break;
  }
  if (edges.size() < m)
    cout << -1 << endl;
  else {
    set<pair<int, int> >::iterator it;
    for (it = edges.begin(); it != edges.end(); it++) {
      cout << (*it).first + 1 << ' ' << (*it).second + 1 << endl;
    }
  }
}
