#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
const long long mod = 1e9 + 7;
const long long mod2 = 998244353;
const int oo = 0x7fffffff;
const int sup = 0x80000000;
template <typename it>
void db(it *begin, it *end) {
  while (begin != end) cout << (*begin++) << " ";
  puts("");
}
template <typename it>
string to_str(it n) {
  string s = "";
  while (n) s += n % 10 + '0', n /= 10;
  reverse(s.begin(), s.end());
  return s;
}
template <typename it>
int o(it a) {
  cout << a << endl;
  return 0;
}
inline long long mul_64(long long x, long long y, long long c) {
  return (x * y - (long long)((long double)x / c * y) * c + c) % c;
}
long long ksm(long long a, long long b, long long c) {
  long long ans = 1;
  for (; b; b >>= 1, a = a * a % c)
    if (b & 1) ans = ans * a % c;
  return ans;
}
void exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b)
    x = 1, y = 0;
  else
    exgcd(b, a % b, y, x), y -= (a / b) * x;
}
int n, d, h;
int main() {
  cin >> n >> d >> h;
  if (2 * h < d || h > d || n - 1 < h || n - 1 < d) return o(-1);
  if (d == h) {
    if (n - 1 == h) {
      for (int i = 2; i <= n; i++) printf("%d %d\n", i - 1, i);
      return 0;
    } else {
      if (n >= 3 && h == 1) return o(-1);
      for (int i = n; i >= n - h + 1; i--) printf("%d %d\n", i, i - 1);
      for (int i = 1; i < n - h; i++) printf("%d %d\n", i, n - 1);
    }
    return 0;
  }
  d -= h;
  if (h + 1 + d > n) return o(-1);
  int x = 1;
  for (int i = 2; i <= 1 + h; i++) {
    printf("%d %d\n", x, i);
    x = i;
  }
  for (int i = 2 + h; i <= n;) {
    x = 1;
    for (int j = i; j <= min(n, i + d - 1); j++) printf("%d %d\n", x, j), x = j;
    i += d;
  }
}
