#include<iostream>
using namespace std;
const int N = 1010; // 定义常量 N,用于数组的最大长度
int n, m, q; // n 表示矩阵的行数,m 表示矩阵的列数,q 表示操作的次数
int a[N][N], b[N][N]; // a 用于存储原始矩阵,b 用于存储差分矩阵
// 插入操作函数,用于在差分矩阵 b 上进行区间加法
void insert(int x1, int y1, int x2, int y2, int c) {
b[x1][y1] += c; // 在起始位置 (x1, y1) 增加 c
b[x2 + 1][y1] -= c; // 在 (x2+1, y1) 减去 c
b[x1][y2 + 1] -= c; // 在 (x1, y2+1) 减去 c
b[x2 + 1][y2 + 1] += c; // 在 (x2+1, y2+1) 增加 c
}
int main() {
scanf("%d%d%d", &n, &m, &q); // 读取矩阵的行数 n、列数 m 和操作次数 q
// 读取原始矩阵 a
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
// 初始化差分矩阵 b,使其表示原始矩阵 a
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
insert(i, j, i, j, a[i][j]);
// 进行 q 次操作,每次操作对区间 [x1, y1, x2, y2] 增加 c
while (q--) {
int x1, y1, x2, y2, c;
cin >> x1 >> y1 >> x2 >> y2 >> c; // 读取操作的区间 [x1, y1, x2, y2] 和增加的值 c
insert(x1, y1, x2, y2, c); // 在差分矩阵 b 上进行插入操作
}
// 计算前缀和,还原最终矩阵
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];
////a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+b[i][j];
// 输出最终矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) printf("%d ", b[i][j]);
puts("");
}
return 0; // 返回 0,表示程序成功结束
}