#include<bits/stdc++.h>
using namespace std;
int n,m,K,sum[19][1009],ans=0x3f3f3f3f;
char grid[19][1009];
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m>>K;
	for(int i=0;i<n;i++) cin>>grid[i];
	for(int j=0;j<m;j++)
		for(int i=0;i<n;i++)
			sum[i][j]=(i>0?sum[i-1][j]:0)+(grid[i][j]=='1');
	for(int i=0;i<1<<n-1;i++) {
		vector<int>pos,now,pre;
		int num=0;
		bool c=1;
		pos.push_back(-1);
		for(int j=0;j<n;j++)
			if(1<<j&i)
				pos.push_back(j);
		pos.push_back(n-1);
		now.resize(pos.size(),0);
		pre.resize(pos.size(),0);
		for(int j=0;j<m;j++) {
			bool add=0,can=1;
			for(int k=1;k<pos.size();k++) {
				now[k]=pre[k]+sum[pos[k]][j]-(k>1?sum[pos[k-1]][j]:0);
				if(now[k]-pre[k]>K) {
					can=0;
					break;
				}
				if(now[k]>K) add=1;
			}
			if(!can) {
				c=0;
				break;
			}
			if(add) {
				num++;
				for(int k=1;k<pos.size();k++) now[k]=max(0,pre[k]-K)+now[k]-pre[k];
			}
			pre=now;
		}
		if(c) ans=min(ans,__builtin_popcount(i)+num);
	}
	cout<<ans<<endl;
	return 0;
}