#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
const int N = 1e6 + 5;
const long double EPS = 1e-9;
const long long INF = (long long)1e16;
vector<pair<int, int> > vp;
vector<int> ver;
void dfs(int u, int h) {
  if (h == 0) return;
  int cur = ver.back();
  ver.pop_back();
  vp.push_back({u, cur});
  dfs(cur, h - 1);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n, d, h;
  cin >> n >> d >> h;
  if (h * 2 < d || (d == h && d == 1 && n > 2)) {
    cout << "-1\n";
    return 0;
  }
  for (int i = 2; i <= n; i++) ver.push_back(i);
  int rt = 1;
  if (h > 1) {
    int tmp = h - 1, j = n - 1;
    while (tmp--) {
      j--;
    }
    rt = ver[j];
  }
  dfs(1, h);
  dfs(1, d - h);
  while (ver.size()) dfs(rt, 1);
  for (auto i : vp) cout << i.first << " " << i.second << "\n";
  return 0;
}
