#include <bits/stdc++.h>
using namespace std;
template <typename T>
T nextInt() {
  T x = 0, p = 1;
  char ch;
  do {
    ch = getchar();
  } while (ch <= ' ');
  if (ch == '-') {
    p = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * p;
}
const int maxN = (int)2e3 + 10;
const int maxE = (int)4e5 + 10;
const int INF = (int)1e9;
const int mod = (int)1e9 + 7;
const long long LLINF = (long long)1e18;
int myPow(int k, int d) {
  long long res = 1;
  while (d--) {
    res *= k;
    if (res > 1000) return INF;
  }
  return res;
}
int answer[maxN][maxN];
int main() {
  int n, k, d;
  cin >> n >> k >> d;
  if (myPow(k, d) < n) {
    cout << -1 << '\n';
    return 0;
  }
  for (int i = 1; i <= d; ++i) {
    answer[1][i] = 1;
  }
  for (int i = 2; i <= n; ++i) {
    int cntK = 0;
    for (int j = d; j >= 1 && answer[i - 1][j] == k; j--, cntK++)
      ;
    for (int j = 1; j <= d; ++j) {
      if (j < d - cntK) {
        answer[i][j] = answer[i - 1][j];
      } else if (j == d - cntK) {
        answer[i][j] = answer[i - 1][j] + 1;
      } else {
        answer[i][j] = 1;
      }
    }
  }
  for (int j = 1; j <= d; ++j) {
    for (int i = 1; i <= n; ++i) {
      cout << answer[i][j] << ' ';
    }
    cout << '\n';
  }
  return 0;
}
