#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=2e4+10,K=51;
int dp[N][K]={};
int pre[N]={};
int mn[N]={};
int cnt[N]={};
int pr[N]={};
int ind[N]={};
inline void solve()
{
int n,t,s;
cin>>n>>t>>s;
int P[t];
for (auto& i:P)
cin>>i;
string a[n+1];
for (int i=1;i<=n;i++)
cin>>a[i];
for (int i=0;i<=n;i++)
dp[i][0]=2e9+10;
dp[0][0]=0;
for (int i=0;i<t;i++)
pre[i+1]=pre[i]+P[i];
for (int k=1;k<=s;k++)
{
for (int i=0;i<=t;i++)
mn[i]=2e9+10;
mn[k-1]=dp[k-1][k-1]-pre[k-1]*n;
for (int i=0;i<=n;i++)
ind[i]=-1;
ind[s]=k;
for (int i=k;i<=t;i++)
for (int i=1;i<=t;i++)
cnt[i]=n;
for (int i=1;i<=n;i++)
pr[i]=k-2;
for (int i=k;i<=t;i++)
{
ind[n]=i;
for (int j=1;j<=n;j++)
{
if (a[j][i-1]=='0')
{
for (int l=pr[j]+1;l<=i;l++)
{
cnt[l]--;
// if (k==2&&cnt[l]==0)
// cout<<l<<' ';
ind[cnt[l]]=max(ind[cnt[l]],l);
mn[l]=min(mn[l-1],dp[l][k-1]-pre[l]*cnt[l]);
}
pr[j]=i;
}
// cout<<endl;
}
int mne=2e9+10;
for (int j=n;j>=0;j--)
{
if (ind[j]==-1) continue;
// if (k==2)
// cout<<i<<' '<<j<<' '<<z<<endl;
mne=min(mne,mn[ind[j]-1]+pre[i]*j);
}
// cout<<i<<' '<<k<<' '<<mne<<endl;
dp[i][k]=mne;
mn[i]=min(mn[i-1],dp[i][k-1]-pre[i]*cnt[i]);
}
}
for(int i=1;i<=s;i++)
{
cout<<dp[t][i]<<endl;
}
}
signed main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int t=1;
// cin>>t;
for (int i=1;i<=t;i++)
{
solve();
}
}