/*#include <bits/stdc++.h>
using namespace std;
long long int a[305][605]={0};
bool isa[305][605]={0};
long long int dp[305][305][305]={0};
int main(){
/*int s=1,t=i;
int nowx=i,nowy=t+r-l;
dp[i][l][r]=max(
dp[i-1][l][r]+a[nowx-1][nowy],
dp[i-1][l-1][r]+a[nowx-1][nowy+1],
dp[i-1][l][r-1]+a[nowx-1][nowy-1]
)*//*
int n,k;cin>>n>>k;
for(int i=1;i<=n;i++){
for(int j=n-i+1;j<=n+i-1;j++){
cin>>a[i][j];
isa[i][j]=1;
}
}
int s=1,t=n;
dp[s][0][0]=a[s][t];
for(int i=2;i<=n;i++){
for(int l=0;l<=i-1;l++){
for(int r=0;r<=i-1;r++){
int nowx=i,nowy=t+r-l;
if(isa[nowx][nowy]&&l+r<=i-1){
dp[i][l][r]=-1e18;
int prex=i-1,prey=t+r-l;
//1正下
prey=t+r-l;
if(isa[prex][prey]){
dp[i][l][r]=max(
dp[i-1][l][r]+a[nowx][nowy],
dp[i][l][r]
);
}
//2左下
prey=t+r-l+1;
if(isa[prex][prey]){
dp[i][l][r]=max(
dp[i-1][l-1][r]+a[nowx][nowy],
dp[i][l][r]
);
}
//3右下
prey=t+r-1-l;
if(isa[prex][prey]){
dp[i][l][r]=max(
dp[i-1][l][r-1]+a[nowx][nowy],
dp[i][l][r]
);
}
}
}
}
}
long long int ans=-1e18;
for(int l=0;l<=n-1;l++){
for(int r=0;r<=n-1;r++){
int nowx=n,nowy=t+r-l;
if(abs(l-r)<=k&&l+r<=n-1&&isa[nowx][nowy]){
ans=max(ans,dp[n][l][r]);
//cout<<"l:"<<l<<" r:"<<r<<"dp:"<<dp[n][l][r]<<'\n';
}
}
}
cout<<ans<<'\n';
return 0;
}*/
#include <bits/stdc++.h>
using namespace std;
long long int a[305][605]={0};
bool isa[305][605]={0};
long long int dp[305][605]={0};
int main(){
/*
j=n+|r-l|
n-max(k,n-1)<=j<=n+min(k,n-1);
*/
int n,k;cin>>n>>k;
for(int i=1;i<=n;i++){
for(int j=n-i+1;j<=n+i-1;j++){
cin>>a[i][j];
isa[i][j]=1;
}
}
dp[1][n]=a[1][n];
for(int i=2;i<=n;i++){
for(int j=n-i+1;j<=n+i-1;j++){
dp[i][j]=-1e18;
int prex=i-1,prey=j;
//1
prey=j;
if(isa[prex][prey]){
dp[i][j]=max(dp[i][j],dp[prex][prey]+a[i][j]);
}
//2
prey=j+1;
if(isa[prex][prey]){
dp[i][j]=max(dp[i][j],dp[prex][prey]+a[i][j]);
}
//3
prey=j-1;
if(isa[prex][prey]){
dp[i][j]=max(dp[i][j],dp[prex][prey]+a[i][j]);
}
}
}
long long int ans=-1e18-1;
for(int pos=n-min(k,n-1);pos<=n+min(k,n-1);pos++){
ans=max(ans,dp[n][pos]);
}
cout<<ans<<'\n';
return 0;
}