#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
template <typename T>
inline void write(T x) {
  long long i = 20;
  char buf[21];
  buf[20] = '\n';
  do {
    buf[--i] = x % 10 + '0';
    x /= 10;
  } while (x);
  do {
    putchar(buf[i]);
  } while (buf[i++] != '\n');
}
void read(long long &x) {
  bool neg = false;
  register long long c;
  x = 0;
  c = getchar();
  if (c == '-') {
    neg = true;
    c = getchar();
  }
  for (; (c > 47 && c < 58); c = getchar()) x = (x << 1) + (x << 3) + c - 48;
  if (neg) x *= -1;
}
vector<pair<long long, long long> > edge;
map<pair<long long, long long>, long long> mpp;
int main() {
  long long cnt = 0, n, m, v, con;
  cin >> n >> m >> v;
  con = ((n - 1) * (n - 2)) / 2 + 1;
  if (con >= m and m >= n - 1) {
    for (long long i = 1; i <= n - 1; i++) {
      mpp[make_pair(i, i + 1)] = 1;
      edge.push_back(make_pair(i, i + 1));
      cnt++;
    }
    if (cnt != m) {
      for (long long i = 2; i < n; i++) {
        for (long long j = i + 1; j <= n; j++) {
          if (!mpp[make_pair(i, j)]) {
            edge.push_back(make_pair(i, j));
            mpp[make_pair(i, j)] = 1;
            cnt++;
          }
          if (cnt == m) break;
        }
        if (cnt == m) break;
      }
    }
    for (long long i = 0; i < edge.size(); i++) {
      if (edge[i].first == v) {
        edge[i].first = 2;
      } else if (edge[i].first == 2) {
        edge[i].first = v;
      }
      if (edge[i].second == v) {
        edge[i].second = 2;
      } else if (edge[i].second == 2) {
        edge[i].second = v;
      }
    }
    for (long long i = 0; i < edge.size(); i++) {
      cout << edge[i].first << " " << edge[i].second << endl;
    }
  } else
    cout << "-1\n";
  return 0;
}
