#include <bits/stdc++.h>
using namespace std;

using pii = pair<int,int>;
using ll = long long;
#define rep(i, j) for(int i=0; i < (int)(j); i++)
#define repeat(i, j, k) for(int i = (j); i < (int)(k); i++)
#define all(v) v.begin(),v.end()
#define debug(x) cerr << #x << " : " << x << endl

template<class T> bool set_min(T &a, const T &b) { return a > b  ? a = b, true : false; }
template<class T> bool set_max(T &a, const T &b) { return a < b  ? a = b, true : false; }
// vector
template<class T> istream&
operator >> (istream &is , vector<T> &v) { for(T &a : v) is >> a; return is; }
template<class T> ostream&
operator << (ostream &os , const vector<T> &v) { for(const T &t : v) os << "\t" << t; return os << endl; }
// pair
template<class T, class U> ostream&
operator << (ostream &os , const pair<T, U> &v) { return os << "<" << v.first << ", " << v.second << ">"; }

const int INF = 1 << 30;
const ll INFL = 1LL << 60;


int check(vector<int> A) {
    vector<int> v;
    for(int a: A) {
        auto itr=lower_bound(all(v), a);
        if(itr==v.end())v.push_back(a);
        else *itr=a;
    }
    return v.size();
}

bool solve(int N, int A, int B) {
    vector<int> As, Bs;
    if(A > N) return false;
    As.push_back(A);
    int sum = A;
    int nxt_a = A;
    int nxt_b = B - 1;    
    while(sum < N) {
        if(nxt_a == 0 and nxt_b == 0) return false;
        int left = N - sum;
        if(left > 0 and nxt_b > 0) {
            int v = min(nxt_b, left);
            Bs.push_back(v);
            sum += v;
            nxt_a--;
        }
        left = N - sum;
        if(left > 0 and nxt_a > 0) {
            int v = min(nxt_a, left);
            As.push_back(v);
            sum += v;
            nxt_b--;
        }
    }
    if(B > 1 and Bs.size() == 0) return false;
    if(B > 1 and Bs[0] != B - 1) return false;
    if(As.size() > B or Bs.size() > A) return false;
    vector<int> ans;
    int l = 1, r = N;
    rep(i, max(As.size(), Bs.size())) {
        if(i < As.size()) {
            for(int a = l + As[i] - 1; a >= l; a--) ans.push_back(a);
            l += As[i];
        }
        if(i < Bs.size()) {
            for(int b = r - Bs[i] + 1; b <= r; b++) ans.push_back(b);
            r -= Bs[i];
        }
    }
    assert(ans.size() == N);
    reverse(all(ans));

    // assert(check(ans) == A);
    // auto ans2 = ans;
    // rep(i, ans2.size()) ans2[i] *= -1;
    // assert(check(ans2) == B);
    
    rep(i, ans.size()) {
        cout << ans[i] << (i == ans.size() - 1 ? "\n" : " ");
    }
    return true;
}

bool solve2(int N, int A, int B) {
    vector<int> As, Bs;
    if(B > N) return false;
    Bs.push_back(B);
    int sum = B;
    int nxt_a = A - 1;
    int nxt_b = B;    
    while(sum < N) {
        if(nxt_a == 0 and nxt_b == 0) return false;
        int left = N - sum;
        if(left > 0 and nxt_a > 0) {
            int v = min(nxt_a, left);
            As.push_back(v);
            sum += v;
            nxt_b--;
        }
        left = N - sum;
        if(left > 0 and nxt_b > 0) {
            int v = min(nxt_b, left);            
            Bs.push_back(v);
            sum += v;
            nxt_a--;
        }
    }
    if(A > 1 and As.size() == 0) return false;
    if(A > 1 and As[0] != A - 1) return false;
    if(As.size() > B or Bs.size() > A) return false;
    vector<int> ans;
    int l = 1, r = N;
    rep(i, max(As.size(), Bs.size())) {
        if(i < Bs.size()) {
            for(int b = r - Bs[i] + 1; b <= r; b++) ans.push_back(b);
            r -= Bs[i];
        }
        if(i < As.size()) {
            for(int a = l + As[i] - 1; a >= l; a--) ans.push_back(a);
            l += As[i];
        }
    }
    assert(r + 1 == l);
    assert(ans.size() == N);
    reverse(all(ans));

    // assert(check(ans) == A);
    // auto ans2 = ans;
    // rep(i, ans2.size()) ans2[i] *= -1;
    // assert(check(ans2) == B);
    
    rep(i, ans.size()) {
        cout << ans[i] << (i == ans.size() - 1 ? "\n" : " ");
    }
    return true;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);

    // repeat(a, 1, 100) {
    //     repeat(b, 1, 100) {
    //         if(a + b - 1 <= 99 and a * b >= 99) {
    //             if(not (solve(99, a, b) or solve2(99, a, b))) {
    //                 cerr << a << " : " << b << endl;
    //             }
    //         }
    //     }
    // }
    // debug("OK");

    int N, A, B; cin >> N >> A >> B;    
    
    if(not (solve(N, A, B) or solve2(N, A, B))) {
    // if(not (solve(N, B, A, -1))) { 
        cout << - 1 << endl;
    }
    
    return 0;
}


Measured memory_bytes: 3440