#include <cstring>
#include <iostream>
using namespace std;
int n,m,p,dp[1008],pfx[1008][1008],c[1008];
int F(int pos) {return (pos % n + n) % n;}
int main()
{
cin >> n >> m >> p;
for(int j = 0; j < n; j++)
{
for(int i = 1; j <= m; i++)
{
cin >> pfx[i][j];
}
}
for(int i = 1; i <= m; i++)
{
for(int j = 0; j < n; j++)
{
pfx[i][j] += pfx[i-1][F(j-1)];
}
}
for(int j = 0; j < n; j++)
{
cin >> c[j];
}
memset(dp,0xc0c0c0c0,sizeof(dp));
dp[0] = 0;
for(int i = 1; i <= m; i++)
{
for(int j = 0; j < n; j++)
{
for(int k = 1; k <= min(p,i); k++)
{
dp[i] = max(dp[i],dp[i-k] - c[F(j-k+1)] + pfx[i][j] - pfx[i-k][F(j-k)]);
}
}
}
cout << dp[m] << endl;
return 0;
}