#include <bits/stdc++.h>
using namespace std;
void _fill_int(int* p, int val, int rep) {
  int i;
  for (i = 0; i < rep; i++) p[i] = val;
}
signed long long N, K, D;
int mat[1001][1001];
void dfs(int d, int l, int r) {
  if (d >= D) return;
  int i;
  if (r - l <= K) {
    for (i = 0; i < r - l; i++) mat[d][i + l] = i;
  } else {
    int st = (r - l + (K - 1)) / K;
    for (i = 0; i * st + l < r; i++) {
      int j;
      for (j = 0; j < st; j++)
        if (l + i * st + j < r) mat[d][l + i * st + j] = i;
      dfs(d + 1, l + i * st, min(l + (i + 1) * st, r));
    }
  }
}
void solve() {
  int f, i, j, k, l, x, y;
  cin >> N >> K >> D;
  if (K >= N) {
    for (i = 0; i < D; i++) {
      for (j = 0; j < N; j++) (void)printf("%d ", j + 1);
      (void)printf("\n");
    }
    return;
  }
  signed long long t = 1;
  for (i = 0; i < D; i++) {
    t *= K;
    if (t >= N) break;
  }
  if (i == D) return (void)printf("-1\n");
  dfs(0, 0, N);
  for (i = 0; i < D; i++) {
    for (j = 0; j < N; j++) (void)printf("%d ", mat[i][j] + 1);
    (void)printf("\n");
  }
}
int main(int argc, char** argv) {
  string s;
  if (argc == 1) ios::sync_with_stdio(false);
  for (int i = 1; i < argc; i++) s += argv[i], s += '\n';
  for (int i = s.size() - 1; i >= 0; i--) ungetc(s[i], stdin);
  solve();
  return 0;
}
