#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
const long long MOD = 1e9 + 7;
const long long INF = 1e18;
const long double PI = 3.1415926535897932384626433832795028841;
bool TST = 0;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= MOD;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
  }
  return res;
}
void Show(int *QQ, int N) {
  if (not TST) {
    return;
  }
  for (int x = 0; x < N; x++) {
    cout << QQ[x];
    if (x != N - 1) {
      cout << ',';
    }
  }
  cout << '\n';
}
void ShowLL(long long *QQ, int N) {
  if (not TST) {
    return;
  }
  for (int x = 0; x < N; x++) {
    cout << QQ[x];
    if (x != N - 1) {
      cout << ',';
    }
  }
  cout << '\n';
}
int n, a, b;
int T[100][100];
bool Posible() {
  if (n > a * b) {
    return false;
  }
  int TDEM = (n + 1) / 2;
  int TREP = n / 2;
  int Pdem = 0;
  int Prep = 0;
  bool flag = 0;
  for (int y = 0; y < a; y++) {
    for (int x = 0; x < b; x++) {
      if (x == 0) {
        if (flag == 0) {
          T[y][x] = 0;
          flag = 1;
        } else {
          T[y][x] = 1;
          flag = 0;
        }
      } else {
        T[y][x] = not T[y][x - 1];
      }
    }
  }
  for (int y = 0; y < a; y++) {
    for (int x = 0; x < b; x++) {
      if (T[y][x] == 0) {
        Pdem++;
        if (Pdem <= TDEM) {
          T[y][x] = Pdem * 2 - 1;
        } else {
          T[y][x] = 0;
        }
      } else {
        Prep++;
        if (Prep <= TREP) {
          T[y][x] = Prep * 2;
        } else {
          T[y][x] = 0;
        }
      }
    }
  }
  return true;
}
int main() {
  cin >> n >> a >> b;
  if (Posible()) {
    for (int y = 0; y < a; y++) {
      for (int x = 0; x < b; x++) {
        cout << T[y][x] << ' ';
      }
      cout << '\n';
    }
  } else {
    cout << -1 << '\n';
  }
}
