#include <iostream>
using namespace std;
const int N = 1010;
int a[N][N], b[N][N];
int main()
{
int n, m, q;
cin >> n >> m >> q;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
cin >> a[i][j];
// 同时也可以求二维差分矩阵b,求法就是求二维前缀和矩阵那个公式移个项
b[i][j] = a[i][j] - a[i][j - 1] - a[i - 1][j] + a[i - 1][j - 1];
}
// 操作
while(q--) {
int x1, y1, x2, y2, c;
cin >> x1 >> y1 >> x2 >> y2 >> c;
// 这里对差分数组的模拟操作,看不懂可以刷一边y总讲解
b[x1][y1] += c, b[x1][y2 + 1] -= c, b[x2 + 1][y1] -= c, b[x2 + 1][y2 + 1] += c;
}
// 对二维差分数组b求二维前缀和矩阵a,就得到了处理后的二维数组a
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
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)
cout << a[i][j] << ' ';
cout << endl;
}
return 0;
}