#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T BIGMOD(T n, T m, T mod) {
  long long ans = 1;
  long long k = n;
  while (m) {
    if (m & 1) {
      ans *= k;
      if (ans > mod) ans %= mod;
    }
    k *= k;
    if (k > mod) k %= mod;
    m >>= 1;
  }
  return ans;
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / gcd(a, b));
}
template <class T>
inline T power(T b, T p) {
  if (p < 0) return -1;
  if (b <= 0) return -2;
  if (!p) return 1;
  return b * power(b, p - 1);
}
template <typename T>
inline bool in_grid(T i, T j, T n) {
  if (i - 1 >= 0 && i + 1 < n && j - 1 >= 0 && j + 1 < n) return true;
  return false;
}
template <typename T>
inline bool isOn(T mask, T pos) {
  return mask & (1 << pos);
}
template <typename T>
inline int Off(T mask, T pos) {
  return mask ^ (1 << pos);
}
template <typename T>
inline int On(T mask, T pos) {
  return mask | (1 << pos);
}
int n, m, k;
int g[305], gr[305][305];
vector<int> v;
void con(vector<int> v) {
  for (int i = 0; i < v.size(); i++)
    for (int j = 0; j < v.size(); j++)
      if (m) {
        int u = v[i], u1 = v[j];
        if (u >= u1) continue;
        if (gr[u][u1]) continue;
        gr[u][u1] = 1;
        gr[u1][u] = 1;
        m--;
      }
}
void print() {
  for (int i = 1; i < n + 1; i++)
    for (int j = 1; j < n + 1; j++)
      if (gr[i][j] && i < j) cout << i << " " << j << endl;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int no;
    cin >> no;
    g[no] = 1;
  }
  if (n - 1 > m || n == k || n * (n - 1) / 2 == m) {
    cout << -1 << endl;
    return 0;
  }
  if (k == 1) {
    int cn;
    for (int i = 1; i < n + 1; i++)
      if (!g[i])
        v.push_back(i);
      else
        cn = i;
    for (int i = 1; i < v.size(); i++) {
      int u = v[i], u1 = v[i - 1];
      gr[u][u1] = 1;
      gr[u1][u] = 1;
      m--;
    }
    for (int i = 1; i < v.size(); i++) {
      gr[cn][v[i]] = gr[v[i]][cn] = 1;
      m--;
    }
    con(v);
    print();
    return 0;
  }
  int cn;
  for (int i = 1; i < n + 1; i++)
    if (!g[i])
      v.push_back(i);
    else
      cn = i;
  int n1 = n - 1;
  if (n1 * (n1 - 1) / 2 + v.size() < m) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 1; i < v.size(); i++) {
    int u = v[i], u1 = v[i - 1];
    gr[u][u1] = 1;
    gr[u1][u] = 1;
    m--;
  }
  v.clear();
  for (int i = 1; i < n + 1; i++)
    if (g[i] && i != cn) v.push_back(i);
  for (int i = 1; i < v.size(); i++) {
    int u = v[i], u1 = v[i - 1];
    gr[u][u1] = 1;
    gr[u1][u] = 1;
    m--;
  }
  for (int i = 1; i < n + 1; i++)
    if (!g[i]) {
      gr[cn][i] = gr[i][cn] = gr[i][v[0]] = 1;
      gr[v[0]][i] = 1;
      m -= 2;
      break;
    }
  v.clear();
  for (int i = 1; i < n + 1; i++)
    if (i != cn) v.push_back(i);
  con(v);
  v.clear();
  for (int i = 1; i < n + 1; i++)
    if (!g[i] && !gr[i][cn] && m) {
      gr[i][cn] = gr[cn][i] = 1;
      m--;
    }
  print();
  return 0;
}
