rt
#include<iostream>
#define RE register
using namespace std;
int n,k,ans=-1;
int mp[401][401];
int qzh[401][401];//第i行前j个数的和
void Count(int x,int y,int k)
{
int mini=max(1,x-k),maxi=min(n,x+k),num=0,ge=0;
for(RE int i=mini;i<=x;i++,ge++)
{
int minj=max(1,y-ge),maxj=min(n,y+ge);
//cout<<i<<" "<<minj<<" "<<maxj<<"\n";
num+=qzh[i][maxj]-qzh[i][minj-1];
}
ge-=2;
for(RE int i=x+1;i<=maxi;i++,ge--)
{
int minj=max(1,y-ge),maxj=min(n,y+ge);
//cout<<i<<" "<<minj<<" "<<maxj<<"\n";
num+=qzh[i][maxj]-qzh[i][minj-1];
}
//cout<<x<<" "<<y<<" "<<num<<"\n";
ans=max(ans,num);
}
signed main()
{
//freopen("lazy.in","r",stdin);
//freopen("lazy.out","w",stdout);
scanf("%d%d",&n,&k);
for(RE int i=1;i<=n;i++)
{
for(RE int j=1;j<=n;j++)
{
scanf("%d",&mp[i][j]);
qzh[i][j]=qzh[i][j-1]+mp[i][j];
}
}
for(RE int i=1;i<=n;i++)
{
for(RE int j=1;j<=n;j++)
{
Count(i,j,k);
}
}
cout<<ans<<"\n";
return 0;
//fclose(stdin);
//fclose(stdout);
}