// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
// 图片见底部,图中圈圈表示放一个,叉叉是剩下的
#include <iostream>
#include <vector>
using namespace std;
/*bb_makevec*/template <typename T> T bb_makevec(T bbv_value) { return bbv_value;}template<typename T1, typename T2, typename ...Args> auto bb_makevec(T1 n, T2 m,
Args... arg) { using newtype = decltype(bb_makevec(m, arg...)); return vector<newtype>(n, bb_makevec(m, arg...));}
/*read*/template<typename T> void read(T& bbv_value) { bbv_value = 0; char bbv_c; bbv_c = getchar(); while (bbv_c > '9' || bbv_c < '0') { bbv_c = getchar(); } while (bbv_c <= '9' && bbv_c >= '0') { bbv_value = (bbv_value << 3) + (bbv_value << 1) + (bbv_c & 15); bbv_c = getchar(); }}
#define rd read
#define pre(i, j, k) for (int i = j; i < k; i++)
int main() {
int n, m;
rd(n), rd(m);//--------快读
auto a = bb_makevec(n, m, 0);//-----创建n * m 的初始元素为0的向量(vector)
int k;
rd(k);
int mmin = min(n, m);
pre(i, 0, mmin) {//--------对角线放置
a[i][i] = 1;
k--;
if (k < 0) {//---------判断是否足够,注意不是<=而是<,因为当n==m时最后一次可以为零,n!=m时后面另外判断
cout << -1;
return 0;
}
}
if (n > m) {
pre(i, mmin, n - 1) {
a[i][m - 1] = 1;
k--;
if (k <= 0) {
cout << -1;
return 0;
}
}
} else {
pre(i, mmin, m - 1) {
a[n - 1][i] = 1;
k--;
if (k <= 0) {
cout << -1;
return 0;
}
}
}
if (n != m){
if (k == 0){
cout << -1;
return 0;
}
a[n- 1][m-1] = k;
}
else{
a[n - 1][m - 1] += k;
}
pre(i, 0, n){
pre(j, 0, m)
cout << a[i][j] << ' ';
cout << endl;
}
}
// 64 位输出请用 printf("%lld")