#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXN 105 int K, N, M; int A[MAXN][MAXN]; vector > edges; void addEdge(int a, int b) { A[a][b] = 1 - A[a][b]; A[b][a] = 1 - A[b][a]; } int main() { // freopen("date.in", "r", stdin); // freopen("date.out","w", stdout); cin >> K >> N >> M; if(K == 1) { cout << 0 << '\n'; return 0; } if(N < K) { if(M < K) { cout << -1 << '\n'; return 0; } else { // M=K for(int i = 0; i < N - 1; i++) addEdge(i, i + 1); } } else { // N=K if(M == K) { cout << -1 << '\n'; return 0; } else { // M > :: iterator it = edges.begin(); it != edges.end(); it++) cout << it->first + 1 << " " << it->second + 1 << '\n'; return 0; }