#include <cstdio>
#include <iostream>
using namespace std;
const int MAXN = 200 + 12;
int n,m,p,v[MAXN][MAXN],cost[MAXN];
int a[MAXN][MAXN],s[MAXN][MAXN],res[MAXN][MAXN];
int dp[MAXN];
int main()
{
scanf("%d%d%d",&n,&m,&p);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
scanf("%d",&v[i][j]);
for (int i=1;i<=n;i++) scanf("%d",cost+i);
for (int i=1;i<=m;i++)
{
for (int w=1;w<=n;w++)
{
int j = (i-w+10*n)%n;
if (j==0) j = n;
a[i][w] = v[j][i];
}
}
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
s[i][j] = s[i-1][j] + a[i][j];
for (int l=1;l<=m;l++)
for (int r=l;r<=m;r++)
{
res[l][r] = 0xc0c0c0c0;
for (int i=1;i<=n;i++)
{
int j = (l-i+10*n)%n;
if (j==0) j = n;
res[l][r] = max(res[l][r],s[r][i]-s[l-1][i]-cost[j]);
}
}
for (int i=m;i>=1;i--)
for (int j=1;j<=p&&i+j-1<=m;j++)
dp[i] = max(dp[i],dp[i+j]+res[i][i+j-1]);
printf("%d",dp[1]);
return 0;
}