#include <iostream>
#include <cstring>
using namespace std;
const int N = 2005;
// 改用 long long 避免数值溢出
long long a[N][N], d[N][N];
void insert(int x1, int y1, int x2, int y2, long long k, int n, int m) {
x1
= max(1, x1); y1 = max(1, y1);
x2
= min(n, x2); y2 = min(m, y2);
if (x1 > x2 || y1 > y2) return;
d
[x1][y1] += k;
if (y2 + 1 <= m + 1) d[x1][y2 + 1] -= k;
if (x2 + 1 <= n + 1) d[x2 + 1][y1] -= k;
if (x2 + 1 <= n + 1 && y2 + 1 <= m + 1) d[x2 + 1][y2 + 1] += k;
}
int main() {
ios
::sync_with_stdio(false);
cin
.tie(nullptr);
cout
.tie(nullptr);
int n, m, q;
// 确保只处理单组输入(题目中是单组输入,多组逻辑会导致重复输出)
if (cin >> n >> m >> q) {
memset(a, 0, sizeof(a));
memset(d, 0, sizeof(d));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin
>> a[i][j];
insert(i, j, i, j, a[i][j], n, m);
}
}
while (q--) {
int x1, y1, x2, y2;
long long k;
cin
>> x1 >> y1 >> x2 >> y2 >> k;
insert(x1, y1, x2, y2, k, n, m);
}
// 严格输出 n 行,每行 m 个元素
for (int i = 1; i <= n; ++i) {
bool first = true;
for (int j = 1; j <= m; ++j) {
a
[i][j] = d[i][j] + a[i-1][j] + a[i][j-1] - a[i-1][j-1];
if (first) {
cout
<< a[i][j];
first
= false;
} else {
cout
<< " " << a[i][j];
}
}
cout
<< "\n";
}
}
return 0;
}