#include<bits/stdc++.h>
using namespace std;
int n,m,r,c;
int a[30][30];
int b[30];
int p[30],q[30][30];
int dp[30][30];
int minn=INT_MAX;
void init_()
{
memset(q,0,sizeof(q));
for(int i=1;i<=n;i++)
{
p[i]=0;
for(int j=1;j<=c;j++)
{
if(j<c) p[i]+=abs(a[i][b[j]]-a[i][b[j+1]]);
for(int k=1;k<i;k++)
{
q[i][k]+=abs(a[k][b[j]]-a[i][b[j]]);
}
}
}
}
void dfs(int t)
{
if(t>c)
{
init_();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=min(i,r);j++)
{
if(j==1) dp[i][j]=p[i];
else if(i==j) dp[i][j]=dp[i-1][j-1]+p[i]+q[i][j-1];
else
{
dp[i][j]=INT_MAX;
for(int k=j-1;k<i;k++)
{
dp[i][j]=min(dp[i][j],dp[k][j-1]+p[i]+q[i][k]);
}
}
if(j==r) minn=min(minn,dp[i][j]);
}
}
return;
}
for(int i=b[t-1]+1;i<=n-(c-t);i++)
{
b[t]=i;
dfs(t+1);
}
return;
}
int main()
{
cin>>n>>m>>r>>c;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
memset(dp,0x3f,sizeof(dp));
dfs(1);
cout<<minn;
return 0;
}