rt<^~^>
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int zyc = 4000 ;
int n,m,k,a[zyc][zyc],f[9][zyc][zyc],b[zyc][zyc],maxv=-520;
inline int read(){
int x;
cin>>x;
return x;
}
inline int Get_Zyc(int x,int y,int xx,int yy){
return b[xx][yy]+b[x-1][y-1]-b[x-1][yy]-b[xx][y-1];
}
signed main(){
n=read();k=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=read(),b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j];
for(int i=k;i<=n;i++)
for(int j=k;j<=n;j++)
f[1][i][j]=max(max(f[1][i][j-1],f[1][i-1][j]),Get_Zyc(i-k+1,j-k+1,i,j));
for(int i=k;i<=n;i++)
for(int j=n-k+1;j;j--)
f[3][i][j]=max(max(f[3][i][j+1],f[3][i-1][j]),Get_Zyc(i-k+1,j,i,j+k-1));
for(int i=n-k+1;i;i--)
for(int j=1;j<=n;j++)
f[2][i][j]=max(max(f[2][i][j-1],f[2][i+1][j]),Get_Zyc(i,j-k+1,i+k-1,j));
for(int i=n-k+1;i;i--)
for(int j=n-k+1;j;j--)
f[4][i][j]=max(max(f[4][i][j+1],f[4][i+1][j]),Get_Zyc(i,j,i+k-1,j+k-1));
for(int i=1;i<=n-k+1;i++)
for(int j=1;j<=n-k+1;j++)
f[5][i][i+k-1]=max(f[5][i][i+k-1],Get_Zyc(i,j,i+k-1,j+k-1));
for(int len=k+1;len<=n;len++)
for(int i=1,j=i+len-1;j<=n;j++,i++)
f[5][i][j]=max(f[5][i+1][j],f[5][i][j-1]);
for(int i=1;i<=n-k+1;i++)
for(int j=1;j<=n-k+1;j++)
f[6][i][i+k-1]=max(f[6][i][i+k-1],Get_Zyc(j,i,j+k-1,i+k-1));
for(int len=k+1;len<=n;len++)
for(int i=1,j=i+len-1;j<=n;j++,i++)
f[6][i][j]=max(f[6][i+1][j],f[6][i][j-1]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
maxv=max(maxv,max(max(f[5][i+1][n]+f[1][i][j]+f[3][i][j+1],f[5][1][i]+f[2][i+1][j]+f[4][i+1][j+1]),max(f[6][j+1][n]+f[1][i][j]+f[2][i+1][j],f[6][1][j]+f[3][i][j+1]+f[4][i+1][j+1])));
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
maxv=max(maxv,f[5][1][i]+f[5][i+1][j]+f[5][j+1][n]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
maxv=max(maxv,f[6][1][i]+f[6][i+1][j]+f[6][j+1][n]);
cout<<maxv;
}