#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1<<15;
int dp[N][55], Mn[N][55];
int num[N], sc[N];
vector<pair<int, int>> vec[N];
vector<int> en[N];
signed main(){
int n, t, S;
cin>>n>>t>>S;
for (int i=1;i<=t;i++)
cin>>sc[i], sc[i] += sc[i-1];
for (int i=0;i<n;i++){
string s;
cin>>s;
for (int j=t-1, l = t;j+1;j--){
if (s[j] == '0')
l = j;
en[j].push_back(l);
}
}
for (int k=0;k<=S;k++){
for (int i=0;i<=t;i++)
dp[i][k] = 2e9 + 7;
}
for (int i=0;i<t;i++){
sort(begin(en[i]), end(en[i]));
for (int j=0, k = 0;j < n;j = k){
while (k < n and en[i][k] == en[i][j])
k++;
vec[i].push_back({en[i][j], k - j});
}
vec[i].push_back({t+1, 0});
}
dp[0][0] = 0;
for (int k=1;k<=S;k++){
for (int i=0;i<=t;i++)
for (int j=0;j<=n;j++)
Mn[i][j] = 2e9 + 7;
for (int i=0;i<=t;i++){
for (int j=0;j<=n;j++)
dp[i][k] = min(dp[i][k], Mn[i][j] + sc[i] * j);
int cr = n, L = i;
for (auto [p, c] : vec[i]){
Mn[L][cr] = min(Mn[L][cr], dp[i][k-1] - cr * sc[i]);
L = p+1, cr -= c;
}
for (int j=0;j<=n;j++)
Mn[i+1][j] = min(Mn[i+1][j], Mn[i][j]);
}
cout<<dp[t][k]<<endl;
}
}