要处理两种特殊形式,因为这两种在我们尝试往斜对角线填充 1 时,会存在数组越界,所以要特殊处理

// 一种是 n > m 的

0 0 0 0
0 0 0 0

// 另一种是 n < m 的
0 0
0 0
0 0
0 0
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    const [n, m, k] =(await readline()).split(' ').map(Number)
    const maxBallCount = Math.max(n, m)

    if (k < maxBallCount) {
        console.log(-1)
        return
    }

	// 构建一个二维数组并填充 0
    const binaryArr = new Array(n).fill().map(() => new Array(m).fill(0))
	// 计算最小所需的小球数量
    const remainBallCount = k - maxBallCount

    for (let i = 0; i < maxBallCount; i++) {
        if (n < m && i + 1 > n) { // 形式1处理
            binaryArr[n - 1][i] = 1
        } else if (n > m && i + 1 > m) { // 形式2处理
            binaryArr[i][m - 1] = 1
        } else { // 如果 n === m
            binaryArr[i][i] = 1
        }
    }
    
    binaryArr[0][0] = binaryArr[0][0] + remainBallCount

    for (let i = 0; i < n; i++) {
        console.log(binaryArr[i].join(' '))
    }
}()