#include <bits/stdc++.h>
#include <unistd.h>
#define inf 1000000007LL
#define INF 1000000000000000007LL
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define st first
#define nd second
#define ll long long
#define ld long double
#define pii pair<int,int>
#define vi vector<int>
#define vll vector<long long>
#define vpii vector<pair<int,int>>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define LOG(x) (63-__builtin_clzll(x))
#define rep(i, n) for(int i=0; i<(n); ++i)
#define rep1(i, n) for(int i=1; i<=(n); ++i)
#define endr cerr<<'\n'
#define endl '\n'
#ifdef DEBUG
#define pv(...) cerr<<'\n',dbg(#__VA_ARGS__, __VA_ARGS__)
#define ps(x) {cerr<<'\n'<<#x<<":\n:";for(auto _q:(x)){cerr<<_q<<" ";}cerr<<'\n';}
#define pa(x, xs) {cerr<<'\n'<<#x<<":\n:";for(int _q=0; _q<=(xs); ++_q){cerr<<x[_q]<<" ";}cerr<<'\n';}
#define pal(x, xs) {cerr<<'\n'<<#x<<":\n";for(int _q=0; _q<=(xs); ++_q){cerr<<_q<<": "<<setw(_q? 3-(int32_t)log10(_q):3)<<x[_q]<<'\n';}cerr<<'\n';}
#define ppii(x, xs) {cerr<<'\n'<<#x<<":\n";for(int _q=0; _q<=(xs); ++_q){cerr<<_q<<": "<<setw(_q? 6-(int32_t)log10(_q):6)<<x[_q].first<<" "<<setw(5)<<x[_q].second<<'\n';}cerr<<'\n';}
#define pm(x, xn, xm) {cerr<<'\n'<<#x<<":\n";for(int _qa=0; _qa<=(xn); ++_qa){for(int _qb=0; _qb<=(xm); ++_qb){cerr<<setw(6)<<x[_qa][_qb]<<" ";}cerr<<'\n';}cerr<<'\n';}
#else
#define cerr if(0)cout
#define pv(...) if(0)endr
#define ps(x) if(0)endr
#define pa(x, xs) if(0)endr
#define pal(x, xs) if(0)endr
#define ppii(x, xs) if(0)endr
#define pm(x, xn, xm) if(0)endr
#endif
using namespace std;
template<class T> void dbg(const char* xn, T x){cerr<<xn<<": "<<x<<"\n";} template<class T, class... TA> void dbg(const char* xn, T x, TA... t){while(*xn!=',')cerr<<*xn++;cerr<<": "<<x<<",";dbg(xn+1, t...);}
template<class T> inline bool upd_max(T &x, T y){return y>x?x=y,true:false;} template<class T> inline bool upd_min(T &x, T y){return y<x?x=y,true:false;}
const int N = 1000007;
#define int long long

int n, I, D, ans[N];
vi V;
bitset<N> vis;


vi resLIS;
int LIS()
{
  resLIS.clear();
  for (int i=0; i<sz(V); ++i)
  {
    auto it = lower_bound(all(resLIS), V[i]);
    if (it == resLIS.end()) resLIS.pb(V[i]);
    else *it = V[i];
  }

  return sz(resLIS);
}

vi resLDS;
int LDS()
{
  resLDS.clear();
  for (int i=0; i<sz(V); ++i)
  {
    auto it = lower_bound(all(resLDS), -V[i]);
    if (it == resLDS.end()) resLDS.pb(-V[i]);
    else *it = -V[i];
  }

  return sz(resLDS);
}

void no()
{
  cout<<"-1"; exit(0);
}

void solve()
{
  cin>>n>>I>>D;
  if (I+(D-1)*1 > n) no();
  if (I*D < n) no();

  int cur = n-I+1;
  for (int i=1; i<=I; ++i) ans[i] = cur++;

  int total = n - I;
  int boxes = D-1;
  pv(total, boxes);

  if (boxes != 0)
  {
    int inBox = (total+boxes-1)/boxes;
    int pos = I+1;
    cur = n-I+1-inBox;

    pv(inBox, pos, cur);

    for (int box=1; box<=boxes-1; ++box)
    {
      pv(pos, inBox, boxes, box, cur);
      pv(cur+inBox-1+1-inBox, boxes-box+1-1);
      if (cur-1 < boxes-box+1-1)
      {
        pv(cur, pos);
        cur += inBox-1;
        inBox = 1;
        pv(cur, pos);
      }

      for (int j=0; j<inBox; ++j)
      {
        ans[pos+j] = cur+j;
      }

      pos += inBox;
      cur -= inBox;
    }

    cur = 1;
    for (int i=pos; i<=n; ++i)
    {
      ans[i] = cur++;
    }
  }


  endr; pv(n, I, D);
  pa(ans, n);

  V.resize(n);
  for (int i=0; i<n; ++i) V[i] = ans[i+1];
  int r1 = LIS();
  int r2 = LDS();
  //assert(r1 == I);
  //assert(r2 == D);
  if (r1 != I || r2 != D) no();

  for (int i=1; i<=n; ++i) cout<<ans[i]<<" ";

  /*/
  int distinct = 0;
  rep1(i, n)
  {
    assert(ans[i] <= n);
    if (!vis[ans[i]]) vis[ans[i]] = 1, ++distinct;
  }
  assert(distinct == n);
  cout<<1;
  /*/
}

int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cout<<fixed<<setprecision(10);

  solve();

return 0;
}


Measured memory_bytes: 12144