#include<bits/stdc++.h>
using namespace std;
int mat[11][1010];
int n, m, s;
char mm[11][1010];

int isBitSet(int mask, int ind)
{
    mask = mask >> ind;
    return mask & 1;
}

int getSum(int h1, int w1, int h2, int w2)
{
    return mat[h2][w2] + mat[h1-1][w1-1] - mat[h1-1][w2] - mat[h2][w1-1];
}

int main()
{
    cin >> n >> m >> s;
    for(int i=0; i<n; i++)
    {
        cin >> mm[i];
    }

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(mm[i-1][j-1] == '1')
            {
                mat[i][j] = 1;
            }
        }
    }

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            mat[i][j] += mat[i][j-1];
        }
    }

    int minDivisons = INT_MAX;
    for(int mask =0; mask < (1<<(n-1)); mask++)
    {
        int curMask = mask | (1<<(n-1));
        int verticalDivisons = __builtin_popcount(curMask) - 1;
        int noOfDivisons = verticalDivisons;
        int prevHorDiv = 0;
        for(int j=0; j<m; j++)
        {
            int curDiv = 0;
            vector<int> divCount(verticalDivisons+1, 0);
            for(int i=0; i<n; i++)
            {
                if(mm[i][j] == '1')
                {
                    divCount[curDiv]++;
                }
                if(isBitSet(curMask, i))
                {
                    curDiv++;
                }
            }

            int flag = 0;
            for(int i=0; i<curDiv; i++)
            {
                if(divCount[i] > s)
                    flag = 1;
            }
            if(flag)
            {
                noOfDivisons = n+ m + 1;
                break;
            }

            // Make Horizontal Divisons
            // int prevHorDiv = 0;
            int sum = 0;
            int flag2 = 0;
            for(int i=0; i<n; i++)
            {
                sum = sum + mat[i+1][j+1] - mat[i+1][prevHorDiv];
                if(sum > s)
                {
                    flag2 = 1;
                }
                if(isBitSet(curMask, i))
                    sum = 0;
            }
            if(flag2)
                prevHorDiv = j, noOfDivisons++;
        }

        minDivisons = min(minDivisons, noOfDivisons);
    }

    cout << minDivisons << endl;

    // for(int i=1; i<=n; i++)
    // {
    //     for(int j=1; j<=m; j++)
    //     {
    //         mat[i][j] = mat[i][j] + mat[i][j-1];
    //     }
    // }
    //
    // for(int j=1; j<=m; j++)
    // {
    //     for(int i=1; i<=n; i++)
    //     {
    //         mat[i][j] = mat[i-1][j] + mat[i][j];
    //     }
    // }
    //
    // int minDiv = INT_MAX;
    // for(int mask=0; mask<(1<<(n-1)); mask++)
    // {
    //     int cur = mask | (1<<(n-1));
    //     // cout << mask << " " << cur << endl;
    //     vector<int> interval;
    //     interval.push_back(0);
    //     for(int j=0; j<n; j++)
    //     {
    //         if(isBitSet(cur, j))
    //         {
    //             interval.push_back(j);
    //         }
    //     }
    //
    //     int prev = 0;
    //     int sz = interval.size();
    //     int tmpDiv = __builtin_popcount(cur) - 1;
    //     int flag = 1;
    //     for(int j=1; j<sz; j++)
    //     {
    //         for(int k=0; k<m; k++)
    //         {
    //             // cout << interval[j-1] + 1 << " " << prev+1 << " " << interval[j] + 1 << " " << k+1 << " " << getSum(interval[j-1]+1, prev+1, interval[j]+1, k+1) << endl;
    //             if(getSum(interval[j-1]+1, prev+1, interval[j]+1, k+1) > s)
    //             {
    //                 tmpDiv++;
    //                 prev = k;
    //             }
    //             if(prev == k)
    //             {
    //                 if(getSum(interval[j-1]+1, prev+1, interval[j]+1, k+1) > s)
    //                 {
    //                     flag = 0;
    //                     break;
    //                 }
    //             }
    //         }
    //     }
    //
    //     if(flag)
    //     {
    //         minDiv = min(minDiv, tmpDiv);
    //     }
    // }
    //
    // cout << minDiv << endl;

    return 0;
}


Measured memory_bytes: 256