#include using namespace std; int main(){ int h,w; cin >> h >> w; vector> A(h,vector(w)); vector R(h,0); // 行合計 vector C(w,0); // 列合計 vector S(h+w-1,0); // 斜め合計(右上から左下、添字の和が一定) map M; //斜め合計(左上から右下、添字の差(行番号-列番号が一定)) for(int i=0;i> A[i][j]; int& a=A[i][j]; R[i]+=a; C[j]+=a; S[i+j]+=a; M[i-j]+=a; } } int ans=0; //平行方向にチェック //行 for(int i=0;ians)ans=R[i]; for(int j=i+1;jans)ans=s; } } //列番号が一定 for(int i=0;ians)ans=C[i]; for(int j=i+1;jans)ans=s; } } //斜め(添字の和が一定) for(int i=0;ians)ans=S[i]; for(int j=i+1;jans)ans=s; } } //斜め(添字の差が一定) for(int i=1-w;ians)ans=M[i]; for(int j=i+1;jans)ans=s; } } //タテ・ヨコ for(int i=0;ians)ans=s; } } //ヨコ・ナナメ(添字の和が一定) for(int i=0;ians)ans=s; } } //ヨコ・ナナメ(添字の差が一定) for(int i=0;ians)ans=s; } } //タテ・ナナメ(添字の和が一定) for(int i=0;ians)ans=s; } } //タテ・ナナメ(添字の差が一定) for(int i=0;ians)ans=s; } } //ナナメ直交 for(int i=0;ians)ans=s; } } cout << ans << endl; return 0; }