#include <bits/stdc++.h>
long long mpow(long long a, long long n, long long mod) {
  long long ret = 1;
  long long b = a;
  while (n) {
    if (n & 1) ret = (ret * b) % mod;
    b = (b * b) % mod;
    n >>= 1;
  }
  return (long long)ret;
}
using namespace std;
using namespace std;
vector<pair<int, int> > G;
void solve() {
  int n, h, d;
  cin >> n >> d >> h;
  if (d < h) {
    printf("-1");
    return;
  }
  if (h == 1 && d == 1 && n > 2) {
    printf("-1");
    return;
  }
  int diff = d - h;
  if (diff > h) {
    printf("-1");
    return;
  }
  int reqh = h + 1;
  for (int i = 2; i <= reqh; i++) {
    G.push_back(make_pair(i, i - 1));
  }
  if (reqh > n) {
    printf("-1");
    return;
  }
  int left = n - reqh;
  if (left < diff) {
    printf("-1");
    return;
  }
  int cnt = reqh + 1, prev = 1;
  if (diff == 0) {
    prev = reqh - 1;
    while (left > 0) {
      G.push_back(make_pair(prev, cnt));
      cnt++;
      left--;
    }
    for (int i = 0; i < G.size(); i++) {
      cout << G[i].first << " " << G[i].second << endl;
    }
    return;
  }
  while (left > 0) {
    int x = diff;
    while (x > 0 && left > 0) {
      G.push_back(make_pair(prev, cnt));
      prev = cnt;
      cnt++;
      x--;
      left--;
    }
    prev = 1;
  }
  for (int i = 0; i < G.size(); i++) {
    cout << G[i].first << " " << G[i].second << endl;
  }
}
int main() {
  int t = 1;
  for (int i = 1; i <= t; i++) {
    solve();
  }
  return 0;
}
