#include <bits/stdc++.h>
using namespace std;
int N, d, h;
int main() {
  scanf("%d %d %d", &N, &d, &h);
  vector<int> level[h + 1], r[h + 1];
  if (N == 2 && d == h && d == 1) {
    printf("1 2\n");
    return 0;
  }
  if (d > 2 * h || d >= N || d < h || h >= N || (d == h && d < 2)) {
    puts("-1");
    return 0;
  }
  level[0].push_back(1);
  int v = 2;
  for (int i = 1; i <= h; i++) {
    level[i].push_back(v++);
  }
  d -= h;
  int i = 1;
  int cur = v;
  while (d > 0) {
    r[i++].push_back(cur++);
    d--;
  }
  while (cur <= N) {
    level[h].push_back(cur++);
  }
  for (int i = 1; i <= h; i++) {
    int u = level[i - 1][0];
    for (int j = 0; j < level[i].size(); j++) {
      int v = level[i][j];
      printf("%d %d\n", u, v);
    }
  }
  r[0].push_back(1);
  for (int i = 1; i <= h; i++) {
    if (r[i].size() == 0) break;
    int u = r[i - 1][0];
    for (int j = 0; j < r[i].size(); j++) {
      int v = r[i][j];
      printf("%d %d\n", u, v);
    }
  }
}
