#include <bits/stdc++.h>
using namespace std;
const int maxn = 310;
const double eps = 1e-7;
vector<int> a, b;
vector<pair<int, int> > ans;
bool vis[maxn];
int n, m, k;
int main() {
  while (~scanf("%d%d%d", &n, &m, &k)) {
    a.clear();
    b.clear();
    memset(vis, false, sizeof vis);
    for (int i = 0; i < k; ++i) {
      int x;
      scanf("%d", &x);
      a.push_back(x);
      vis[x] = true;
    }
    for (int i = 1; i <= n; ++i) {
      if (!vis[i]) b.push_back(i);
    }
    ans.clear();
    int oh = (n - 1) * (n - 2) / 2 + n - k;
    if (m > oh || k == n) {
      puts("-1");
      continue;
    }
    for (int i = 0; i < b.size(); ++i) {
      if (i == 0) continue;
      ans.push_back(make_pair(b[i - 1], b[i]));
      m--;
      if (m == 0) break;
    }
    if (m)
      for (int i = 0; i < b.size(); ++i) {
        for (int j = 0; j < a.size(); ++j) {
          ans.push_back(make_pair(b[i], a[j]));
          m--;
          if (m == 0) break;
        }
        if (m == 0) break;
      }
    if (m)
      for (int i = 0; i < b.size(); ++i) {
        for (int j = 0; j < i - 1; ++j) {
          ans.push_back(make_pair(b[i], b[j]));
          m--;
          if (m == 0) break;
        }
        if (m == 0) break;
      }
    if (m)
      for (int i = 0; i < a.size(); ++i) {
        for (int j = 0; j < i; ++j) {
          ans.push_back(make_pair(a[i], a[j]));
          m--;
          if (m == 0) break;
        }
        if (m == 0) break;
      }
    for (int i = 0; i < ans.size(); ++i) {
      printf("%d %d\n", ans[i].first, ans[i].second);
    }
  }
}
