n, m, k = map(int, input().split())
def get_matrix(n, m, k):
if k < max(n, m):
return -1
result = [[0] * m for _ in range(n)]
used = 0
# 首先放 min(n, m) 个对角线上的 1
for i in range(min(n, m)):
result[i][i] = 1
used += 1
# 如果 n > m,需要给多出来的行加小球(列 m-1)
for i in range(m, n - 1):
result[i][m - 1] = 1
used += 1
# 如果 m > n,需要给多出来的列加小球(行 n-1)
for j in range(n, m - 1):
result[n - 1][j] = 1
used += 1
# 最后剩下的球放在最后一个格子
last_i = n - 1
last_j = m - 1
result[last_i][last_j] = k - used + result[last_i][last_j] # 累加
return result
result = get_matrix(n, m, k)
if result == -1:
print(-1)
else:
for row in result:
print(' '.join(map(str, row)))
时间复杂度:O(n + m),仅访问部分位置空间复杂度:O(n * m)(若强制输出完整矩阵,无法避免)若允许稀疏表示,空间也可降至 O(n + m)