#include <bits/stdc++.h>   using namespace std;   inline int inp() { return 0; }   inline int inp(bool& A) {     if (cin >> A) return 1;     return -1;   }   inline int inp(char& A) { return scanf(  %c , &A); }   inline int inp(int& A) { return scanf( %d , &A); }   inline int inp(float& A) {     if (cin >> A) return 1;     return -1;   }   inline int inp(long long& A) { return scanf( %I64d , &A); }   inline int inp(double& A) { return scanf( %lf , &A); }   inline int inp(char* A) { return scanf( %s , A); }   inline int inp(string& A) {     if (cin >> A) return 1;     return -1;   }   template <class Front, class... Queue>   inline int inp(Front& A, Queue&... B) {     return inp(A) + inp(B...);   }   inline int oup() { return 0; }   inline int oup(bool A) {     if (cout << A) return 1;     return -1;   }   inline int oup(char A) { return printf( %c , A); }   inline int oup(int A) { return printf( %d , A); }   inline int oup(float A) {     if (cout << A) return 1;     return -1;   }   inline int oup(long long A) { return printf( %I64d , A); }   inline int oup(double A) { return printf( %lf , A); }   inline int oup(char* A) { return printf(A); }   inline int oup(const char* A) { return printf( %s , A); }   inline int oup(string& A) {     if (cout << A) return 1;     return -1;   }   template <class Front, class... Queue>   inline int oup(Front A, Queue... B) {     return oup(A) + oup(B...);   }   template <class T>   inline void remax(T& A, T B) {     if (A < B) A = B;   }   template <class T>   inline void remin(T& A, T B) {     if (A > B) A = B;   }   string ToString(long long num) {     string ret;     do {       ret += ((num % 10) +  0 );       num /= 10;     } while (num);     reverse(ret.begin(), ret.end());     return ret;   }   long long ToNumber(string s) {     long long r = 0, p = 1;     for (int i = s.size() - 1; i >= 0; --i) r += (s[i] -  0 ) * p, p *= 10;     return r;   }   long long Gcd(long long a, long long b) {     while (a %= b ^= a ^= b ^= a)       ;     return b;   }   long long Power(long long base, long long power) {     long long ret = 1;     while (power) {       if (power & 1) ret *= base;       power >>= 1;       base *= base;     }     return ret;   }   long long PowerMod(long long base, long long power, long long mod) {     if (!power) return 1;     if (power & 1) return (base * PowerMod(base, power - 1, mod)) % mod;     return PowerMod((base * base) % mod, power >> 1, mod);   }   int Log(long long num, long long base) {     int ret = 0;     while (num) {       ++ret;       num /= base;     }     return ret;   }   int Count(long long mask) {     int ret = 0;     while (mask) {       if (mask & 1) ++ret;       mask >>= 1;     }     return ret;   }   inline void run() {   in:;     int n, m, v;     if (inp(n, m, v) != 3) return;     if (m < n - 1) {       oup( -1 n );       return;     }     if (m > (((n - 1) * (n - 2)) >> 1) + 1) {       oup( -1 n );       return;     }     int tmp = 1;     if (v == 1) ++tmp;     for (int i = 1; i <= n; ++i)       if (i != v) oup(i,    , v,   n );     m -= n - 1;     for (int i = 1; i <= n && m; ++i)       if (i != v && i != tmp)         for (int j = i + 1; j <= n && m; ++j)           if (j != v && j != tmp) {             oup(i,    , j,   n );             --m;           }     goto in;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr), cout.tie(nullptr);     run();     return 0;   }