#include<bits/stdc++.h>
using namespace std;
int inn[1005][1005];
#define int long long //这题没想到要开长整型弄半天

void solve() {
    int n,m;cin>>n>>m;
    vector<vector<int>>a(n+1,vector<int>(m+2,0));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++) cin>>a[i][j];
    }
    vector<vector<int>>dp(n+1,vector<int>(m+1,-1e9));//给个非常大的负数,模拟无法达到的情况
    int t;cin>>t;
    while(t--){
        int x,y,v;cin>>x>>y>>v;
        inn[x][y]=v;
    }
    dp[1][1]=a[1][1];//一定要拎出来否则如果起点变成墙就会改变起点dp的值(变成-1e9),之前一直放在循环里导致一直无法AC
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i==1&&j==1) continue;
            if(inn[i][j]>0&&inn[i][j]<=i+j-2) a[i][j]=-1e9;
            dp[i][j]=max(dp[i][j-1],dp[i-1][j])+a[i][j];
        }
    }
    int max_dp=0;//把所有负值抛弃
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++) max_dp=max(max_dp,dp[i][j]);//求最大dp也要拎出来,如果也放在循环里就会把本该走不通的地方变成好像能走通的地方
    }
    cout<<max_dp;
}