#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1010;
const int INF = 0x3f3f3f3f;
int n,m,h,w,k,ans;
int a[11][N],b[11][N],c[11];
int solve(){
    int rs=0; memset(c,0,sizeof(c));
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j) if(b[i][j]>k) return INF;
    for(int i=1;i<=m;++i){
        bool flg=true;
        for(int j=1;j<=n;++j){
            if(c[j]+b[j][i]>k) flg=false;
        }
        if(flg) for(int j=1;j<=n;++j) c[j]+=b[j][i];
        else{ for(int j=1;j<=n;++j) c[j]=b[j][i]; rs++; }
    }
    return rs;
}
void dfs(int d){
    if(d>h){
        ans=min(ans,n-1+solve());
        return ;
    }
    for(int i=1;i<=m;++i) b[n][i]+=a[d][i];
    if(d<h){ n++; dfs(d+1); n--; } dfs(d+1);
    for(int i=1;i<=m;++i) b[n][i]-=a[d][i];
}

int main(){
    scanf("%d %d %d",&h,&w,&k);
    for(int i=1;i<=h;++i)
        for(int j=1;j<=w;++j) scanf("%1d",&a[i][j]);
    ans=INF; n=1; m=w; dfs(1);
    printf("%d\n",ans);
}