#include <bits/stdc++.h>
using namespace std;
const int N = 1000010, mod = 1e9 + 7, INF = 0x3f3f3f3f;
const double eps = 1e-6;
int n, m, v;
int main() {
  scanf("%d%d%d", &n, &m, &v);
  if (m < n - 1) {
    puts("-1");
    return 0;
  }
  if (m == 0) return 0;
  bool f = false;
  for (int i = 1; i <= n - 2; i++) {
    long long sum = 1ll * i * (i + 1) / 2 + 1ll * (n - i - 1) * (n - i) / 2;
    if (sum < m) continue;
    f = 1;
    vector<int> v1, v2;
    for (int j = 1, cnt = 0; j <= n; j++) {
      if (j == v) continue;
      if (cnt < i)
        cnt++, v1.push_back(j);
      else
        v2.push_back(j);
    }
    long long l = 1ll * i * (i + 1) / 2, r;
    if (l >= m)
      l = m - 1, r = 1;
    else
      r = m - l;
    if (l > 0) printf("%d %d\n", v1[0], v), l--;
    if (r > 0) printf("%d %d\n", v2[0], v), r--;
    int len = v1.size();
    for (int j = 1; j < len; j++, l--) {
      if (!l) break;
      l--;
      printf("%d %d\n", v1[j], v);
    }
    for (int j = 0; j < len; j++) {
      for (int k = j + 1; k < len; k++) {
        if (!l) break;
        l--;
        printf("%d %d\n", v1[j], v1[k]);
      }
      if (!l) break;
    }
    len = v2.size();
    for (int j = 1; j < len; j++) {
      if (!r) break;
      r--;
      printf("%d %d\n", v2[j], v);
    }
    for (int j = 0; j < len; j++) {
      for (int k = j + 1; k < len; k++) {
        if (!r) break;
        r--;
        printf("%d %d\n", v2[j], v2[k]);
      }
      if (!r) break;
    }
    break;
  }
  if (!f) puts("-1");
  return 0;
}
