#include #include #include #include #include using namespace std; using namespace atcoder; using ll=long long; using mint=modint998244353; #define all(v) v.begin(),v.end() #define rall(v) v.rbegin(),v.rend() template bool chmax(T &a, T b){if (a < b){a = b;return true;} else return false;} template bool chmin(T &a, T b){if (a > b){a = b;return true;} else return false;} const int dx[]={-1,0,1},dy[]={-1,0,1}; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int H,W; cin>>H>>W; vector A(H+2,vector(W+2)); for(int i=1;i<=H;i++)for(int j=1;j<=W;j++)cin>>A[i][j]; vector>vp; for(int i=0;i<=W;i++)vp.push_back(make_pair(0,i)); for(int i=0;i<=H;i++)vp.push_back(make_pair(i,W+1)); for(int i=W+1;i>=1;i--)vp.push_back(make_pair(H+1,i)); for(int i=H+1;i>=1;i--)vp.push_back(make_pair(i,0)); int L=vp.size(); vector D(L,vector(3,vector(3))); for(int i=0;i=0&&axi<=H+1&&ayi>=0&&ayi<=W+1){ cnt+=A[axi][ayi]; axi+=dx[k]; ayi+=dy[l]; } D[i][k][l]=cnt; } } ll ans=0; vector flag(H+2,vector(W+2)); for(int i=0;i>se; while(axi>=0&&axi<=H+1&&ayi>=0&&ayi<=W+1){ flag[axi][ayi]=true; axi+=dx[a]; ayi+=dy[b]; } while(axj>=0&&axj<=H+1&&ayj>=0&&ayj<=W+1){ if(flag[axj][ayj]){ cnt-=A[axj][ayj]; } axj+=dx[c]; ayj+=dy[d]; } if(axi-dx[a]==vp[j].first&&ayi-dy[b]==vp[j].second)continue; chmax(ans,cnt); while(axi-dx[a]>=0&&axi-dx[a]<=H+1&&ayi-dy[b]>=0&&ayi-dy[b]<=W+1){ axi-=dx[a]; ayi-=dy[b]; flag[axi][ayi]=false; } } } } cout<