#include <bits/stdc++.h>
using namespace std;
template <typename T>
T trace2(T a, T b) {
  cerr << a << " " << b << '\n';
}
template <typename T>
T trace3(T a, T b, T c) {
  cerr << a << " " << b << " " << c << '\n';
}
template <typename T>
T trace4(T a, T b, T c, T d) {
  cerr << a << " " << b << " " << c << " " << d << '\n';
}
template <typename T>
T trace5(T a, T b, T c, T d, T e) {
  cerr << a << " " << b << " " << c << " " << d << " " << e << '\n';
}
template <typename T>
T trace6(T a, T b, T c, T d, T e, T f) {
  cerr << a << " " << b << " " << c << " " << d << " " << e << " " << f << '\n';
}
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << '\n';
  err(++it, args...);
}
template <typename T>
T pow(T a, T b, long long int m) {
  T ans = 1;
  while (b > 0) {
    if (b % 2 == 1) ans = (ans * a) % m;
    b /= 2;
    a = (a * a) % m;
  }
  return ans % m;
}
void swap(long long int *a, long long int *b) {
  long long int temp = *a;
  *a = *b;
  *b = temp;
  return;
}
long long int n, k, d;
long long int arr[1000 + 10][1000 + 10];
bool check() {
  long long int p = 1;
  for (__typeof(d) i = (0) - ((0) > (d)); i != (d) - ((0) > (d));
       i += 1 - 2 * ((0) > (d))) {
    p *= k;
    if (p >= n) {
      return true;
    }
  }
  return false;
}
void cal() {
  for (long long int i = 1; i <= n; i++) {
    long long int temp = i;
    long long int idx = 0;
    while (temp) {
      arr[i][idx] = (temp % k);
      temp = temp / k;
      idx++;
    }
  }
}
void print() {
  for (long long int i = 0; i < d; i++) {
    for (long long int j = 1; j <= n; j++) {
      cout << arr[j][i] + 1 << " ";
    }
    cout << '\n';
  }
}
void fuck() {
  cin >> n >> k >> d;
  if (k >= n) {
    std::vector<long long int> v;
    for (__typeof(n + 1) i = (1) - ((1) > (n + 1));
         i != (n + 1) - ((1) > (n + 1)); i += 1 - 2 * ((1) > (n + 1)))
      v.push_back(i);
    for (__typeof(d) i = (0) - ((0) > (d)); i != (d) - ((0) > (d));
         i += 1 - 2 * ((0) > (d))) {
      for (auto i : v) cout << i << " ";
      cout << '\n';
      long long int temp = *(v.begin());
      v.erase(v.begin());
      v.push_back(temp);
    }
    exit(0);
  }
  if (k == 1 || d == 1) {
    cout << -1 << '\n';
    exit(0);
  }
  if (d >= n) {
    std::vector<long long int> v;
    v.push_back(2);
    for (__typeof(n) i = (1) - ((1) > (n)); i != (n) - ((1) > (n));
         i += 1 - 2 * ((1) > (n)))
      v.push_back(1);
    for (__typeof(d) i = (0) - ((0) > (d)); i != (d) - ((0) > (d));
         i += 1 - 2 * ((0) > (d))) {
      for (auto i : v) cout << i << " ";
      cout << '\n';
      long long int temp = *(v.begin());
      v.erase(v.begin());
      v.push_back(temp);
    }
    exit(0);
  }
  if (check() == false) {
    cout << -1 << '\n';
    exit(0);
  }
  cal();
  print();
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  fuck();
  return 0;
}
