//Utkarsh.25dec
#include <bits/stdc++.h>
#include <chrono>
#include <random>
#define ll long long int
#define ull unsigned long long int
#define pb push_back
#define mp make_pair
#define mod 1000000007
#define rep(i,n) for(ll i=0;i<n;i++)
#define loop(i,a,b) for(ll i=a;i<=b;i++)
#define vi vector <int>
#define vs vector <string>
#define vc vector <char>
#define vl vector <ll>
#define all(c) (c).begin(),(c).end()
#define max3(a,b,c) max(max(a,b),c)
#define min3(a,b,c) min(min(a,b),c)
using namespace std;
ll power(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll modInverse(ll a){return power(a,mod-2);}
const int N=500023;
bool vis[N];
vector <int> adj[N];
void solve()
{
    ll h,w,k;
    cin>>h>>w>>k;
    char board[h+1][w+1];
    for(int i=1;i<=h;i++)
    {
        for(int j=1;j<=w;j++)
            cin>>board[i][j];
    }
    ll ans=INT_MAX;
    // for(int i=1;i<=h;i++)
    // {
    //     for(int j=1;j<=w;j++)
    //         cout<<board[i][j];
    //     cout<<'\n';
    // }
    for(int i=0;i<(1<<(h-1));i++)
    {
        vl hor;
        int temp=i;
        int indx=1;
        while(temp!=0)
        {
            if(temp%2==1)
                hor.pb(indx);
            indx++;
            temp/=2;
        }
        ll p=hor.size();
        hor.pb(h);
        vl sum;
        for(int j=0;j<hor.size();j++)
            sum.pb(0);
        int mark=1;
        for(int t=1;t<=w;t++)
        {
            // if(i==0)
            // {
            // for(auto it:sum)
            //     cout<<it<<' ';
            // cout<<'\n';
            // }
            int a=1;
            ll temp=0;
            int ind=0;
            while(a<=h)
            {
                if(a<=hor[ind])
                {
                    temp+=(board[a][t]-'0');
                    // if(i==0 && t==1)
                    // {
                    //     cout<<(board[a][t]-'0')<<'\n';
                    //     cout<<a<<' '<<temp<<' '<<hor[ind]<<'\n';
                    // }
                    a++;
                    if(a==(h+1))
                    {
                        sum[ind]+=temp;
                        temp=0;
                        ind++;
                    }
                }
                else
                {
                    // if(t==1 && i==0)
                    //     cout<<temp;
                    sum[ind]+=temp;
                    temp=0;
                    ind++;
                }
            }
            int flag=1;
            for(auto it:sum)
            {
                if(it>k)
                {
                    flag=0;
                    break;
                }
            }
            // if(i==0)
            //     cout<<flag<<'\n';
            if(flag==0)
            {
                for(int i=0;i<sum.size();i++)
                    sum[i]=0;
                int a=1;
                ll temp=0;
                int ind=0;
                while(a<=h)
                {
                    if(a<=hor[ind])
                    {
                        temp+=(board[a][t]-'0');
                        a++;
                        if(a==(h+1))
                        {
                            sum[ind]+=temp;
                            temp=0;
                            ind++;
                        }
                    }
                    else
                    {
                        sum[ind]+=temp;
                        temp=0;
                        ind++;
                    }
                }
                for(auto it:sum)
                {
                    if(it>k)
                    {
                        mark=0;
                        break;
                    }
                }
                p++;
            }
            // if(i==0)
            // {
            // for(auto it:sum)
            //     cout<<it<<' ';
            // cout<<'\n';
            // }
        }
        if(mark==1)
        {
            ans=min(ans,p);
        }
    }
    cout<<ans;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int T=1;
    //cin>>T;
    int t=0;
    while(t++<T)
    {
        //cout<<"Case #"<<t<<":"<<' ';
        solve();
        //cout<<'\n';
    }
    cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n";
}

Measured memory_bytes: 12032