#include <bits/stdc++.h>
using namespace std;
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>
T power(T N, T P) {
  return (P == 0) ? 1 : N * power(N, P - 1);
}
long long toInt64(string s) {
  long long r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
double LOG(double N, double B) { return (log10l(N)) / (log10l(B)); }
string itoa(long long a) {
  if (a == 0) return "0";
  string ret;
  for (long long i = a; i > 0; i = i / 10) ret.push_back((i % 10) + 48);
  reverse(ret.begin(), ret.end());
  return ret;
}
vector<string> token(char *s, char *d) {
  vector<string> v;
  char *pch = strtok(s, d);
  while (pch) {
    v.push_back(pch);
    pch = strtok(NULL, d);
  }
  return v;
}
int toggle(int N, int pos) {
  if ((N & (1 << (pos)))) return N = (N & ~(1 << (pos)));
  return N = (N | (1 << (pos)));
}
void pbit(int N) {
  printf("(");
  for (int i = 10; i >= 0; i--) {
    bool x = (N & (1 << (i)));
    cout << x;
  }
  puts(")");
}
int fx[] = {0, 0, 1, -1, 1, -1, 1, -1};
int fy[] = {-1, 1, 0, 0, -1, -1, 1, 1};
int main() {
  int n, e, x;
  scanf("%d%d", &n, &e);
  scanf("%d", &x);
  int ee = e;
  if (e < (n - 1))
    puts("-1");
  else {
    e -= (n - 1);
    int sel = -1;
    for (int i = 1; i <= (int)n - 2; i++) {
      long long d = i;
      long long u = n - d - 1;
      long long dn = (d * (d - 1)) / 2;
      long long un = (u * (u - 1)) / 2;
      if (dn + un >= e) {
        sel = i;
        break;
      }
    }
    if (sel == -1)
      puts("-1");
    else {
      int selu = n - sel - 1;
      bool vis[100002] = {0};
      int tk = 0, c = 0;
      vector<int> up, dow;
      vector<pair<int, int> > out;
      for (int i = 1; i <= n and tk < sel; i++) {
        if (i != x) {
          out.push_back(pair<int, int>(i, x));
          tk++;
          vis[i] = 1;
          dow.push_back(i);
          c++;
        }
      }
      tk = 0;
      for (int i = 1; i <= n and tk < selu; i++) {
        if (i != x and !vis[i]) {
          out.push_back(pair<int, int>(i, x));
          tk++;
          up.push_back(i);
          c++;
        }
      }
      for (int i = 0; i < (int)(int)dow.size(); i++) {
        if (!e) break;
        for (int j = i + 1; j < (int)dow.size() and e; j++) {
          int u = dow[i];
          int v = dow[j];
          out.push_back(pair<int, int>(u, v));
          e--;
        }
      }
      for (int i = 0; i < (int)(int)up.size(); i++) {
        if (!e) break;
        for (int j = i + 1; j < (int)up.size() and e; j++) {
          int u = up[i];
          int v = up[j];
          out.push_back(pair<int, int>(u, v));
          e--;
        }
      }
      for (int i = 0; i < (int)out.size(); i++)
        printf("%d %d\n", out[i].first, out[i].second);
    }
  }
  return 0;
}
