#include <iostream>
using namespace std;
#include<vector>
#define N 1e3
#define int long long
signed main() {
int n,m,q;
cin>>n>>m>>q;
vector<vector<int>>a(N,vector<int>(N));
vector<vector<int>>diff(N,vector<int>(N));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
//构造差分数组
// 一维差分数组代表着增量 二维也是如此
// 二维差分数组的 diff[i][j] 本质也是「增量」,是 a[i][j] 相对于 “上、左、左上” 的净增量;
// 核心矛盾:“上” 和 “左” 都包含了 “左上”,导致直接减会重复,必须补回来。
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
diff[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];
}
} //差分进行加减 代表对右下角所有都加减 依旧结合图形理解
while(q--){
int x1,y1,x2,y2,k;
cin>>x1>>y1>>x2>>y2>>k;
diff[x1][y1]+=k;
diff[x1][y2+1]-=k;
diff[x2+1][y1]-=k;
diff[x2+1][y2+1]+=k;
}
//差分数组进行前缀和 结果得到原数组
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]+diff[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
// 64 位输出请用 printf("%lld")