#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;
}