#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int m=0, n=0, k=0;
int* res = NULL;
int i=0, j=0;
scanf("%d %d %d", &n, &m, &k);
if (k<m || k<n) { // 总数小于行列数中任意值则无法摆放
printf("-1");
} else {
res = (int*)malloc(sizeof(int)*n*m);
memset(res, 0, sizeof(int)*n*m);
if (m == n) { // 行列相等
for (i=0; i<m; ++i) {
res[i*m+i] = 1; // 对角线填1
k--; // 每填一个总数减1
}
} else if (m > n) { // 列大于行
for (i=0; i<n; ++i) {
res[i*m+i] = 1; // 对角线填1
k--; // 每填一个总数减1
}
for (i=n; i<m; ++i) {
res[i] = 1; // 剩下的列,每列第一个填1
k--; // 每填一个总数减1
}
} else { // 行大于列
for (i=0; i<m; ++i) {
res[i*m+i] = 1; // 对角线填1
k--; // 每填一个总数减1
}
for (i=m; i<n; ++i) {
res[i*m] = 1; // 剩下的行,每行第一个填1
k--; // 每填一个总数减1
}
}
if (k != 0) { // 都填完如果还有剩下的
res[0] += k; // 全都累加到第一行第一列
} else {}
for (i=0; i<n; ++i) { // 输出
for (j=0; j<m; ++j) {
printf("%d ", res[i*m+j]);
}
printf("\n");
}
}
return 0;
}