#include <bits/stdc++.h>
using namespace std;
bool marked[305];
bool exists[305][305];
int n, m, k;
vector<pair<int, int> > edges;
void add_edge(int a, int b) {
  if (a > b) swap(a, b);
  if (exists[a][b] || m == 0 || a == b) return;
  exists[a][b] = true;
  m--;
  edges.push_back(make_pair(a, b));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m >> k;
  if (n == k) {
    cout << "-1\n";
    return 0;
  }
  vector<int> marks(k);
  for (int i = 0; i < k; ++i) {
    cin >> marks[i];
    marked[marks[i]] = true;
  }
  int root = -1, special, not_marked;
  for (int i = 1; i <= n; ++i) {
    if (marked[i]) {
      if (root == -1)
        root = i;
      else
        special = i;
    } else
      not_marked = i;
  }
  for (int i = 1; i <= n; ++i) {
    if (i != root && i != special) add_edge(root, i);
  }
  add_edge(not_marked, special);
  for (int i = 1; i <= n; ++i) {
    if (i == special) continue;
    for (int j = 1; j <= n; ++j) {
      if (!(marked[i] && j == special)) add_edge(i, j);
    }
  }
  if (m != 0) {
    cout << "-1\n";
    return 0;
  }
  for (int i = 0; i < edges.size(); ++i)
    cout << edges[i].first << ' ' << edges[i].second << '\n';
}
