#include <bits/stdc++.h>
using namespace std;
struct rebro {
  int u, v;
};
rebro make(int u, int v) {
  rebro z;
  if (u < v) {
    z.u = u;
    z.v = v;
  } else {
    z.u = v;
    z.v = u;
  }
  return z;
}
bool operator<(rebro a, rebro b) {
  if (a.u != b.u)
    return a.u < b.u;
  else
    return a.v < b.v;
}
set<rebro> s;
int main() {
  long long n, m, v, v1;
  cin >> n >> m >> v;
  if (v != n)
    v1 = n;
  else
    v1 = n - 1;
  if (m < n - 1 || m > (n - 1) * (n - 2) / 2 + 1)
    cout << -1 << endl;
  else {
    for (int i = 1; i <= n; i++)
      if (i != v) s.insert(make(i, v));
    int y = n - 1;
    for (int i = 1; i <= n; i++) {
      if (y == m) break;
      for (int j = 1; j <= n; j++) {
        if (i != j && i != v1 && j != v1 && s.find(make(i, j)) == s.end()) {
          s.insert(make(i, j));
          y++;
        }
        if (y == m) break;
      }
    }
    set<rebro>::iterator p;
    p = s.begin();
    rebro r;
    for (int i = 0; i < m; i++) {
      r = *p;
      cout << r.u << ' ' << r.v << endl;
      p++;
    }
  }
  return 0;
}
