using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace q5
{
    class Program
    {
        static int[,] S;
        static int W;
        static int H;
        static int K;




        static void Main(string[] args)
        {
            var arr = Console.ReadLine().Split(' ').Select(x => Convert.ToInt32(x)).ToArray();
            H = arr[0];
            W = arr[1];
            K = arr[2];
            var tbl = new int[W, H, H + 1];
            S = new int[H+1, W+1];
            for (var i = 0; i < H; i++)
            {
                var arr2 = Console.ReadLine().Trim().Select(x => x == '1' ? 1 : 0).ToArray();
                for (var j=0; j<arr2.Length; j++)
                {
                    S[i, j] = arr2[j];
                }
            }

            for (var i = 0; i < H; i++)
            {
                for (var j = 1; j <= (H-i); j++)
                {
                    //Console.WriteLine($"cnt y:{i} h:{j}");
                    for (var k = 0; k < W; k++)
                    {
                        var v = 0;
                        for (var l = 0; l < j; l++)
                        {
                            v += S[i + l, k];
                        }
                        tbl[k, i, j] = v;
                        //Console.Write($"{v} ");
                    }
                    //Console.WriteLine();
                }
            }

            Func<int, int, int, int> TryCutOnceMin = (x, y, h) =>
            {
                var w = 0;
                var n = 0;
                while ((x + w) < W)
                {
                    var s = tbl[x + w, y, h];
                    if ((n + s) > K)
                        break;
                    n += s;
                    w += 1;
                }
                return w;
            };
            Func<int, int, int?> TryCutOnce = (cutPattern, x) =>
            {
                var retval = int.MaxValue;
                var h = 1;
                var y = 0;
                for (var i = 0; i < H-1; i++)
                {
                    if ((cutPattern & 1) == 1)
                    {
                        retval = Math.Min(retval, TryCutOnceMin(x, y, h));
                        if (retval == 0)
                            return null;
                        y += h;
                        h = 0;
                    }
                    h += 1;
                    cutPattern = cutPattern >> 1;
                }
                retval = Math.Min(retval, TryCutOnceMin(x, y, h));
                if (retval == 0)
                    return null;
                return retval;
            };
            Func<int, int> PatternToCutCount = (cutPattern) =>
            {
                var retval = 0;
                for (var i = 0; i < H; i++)
                {
                    retval += (cutPattern & 1);
                    cutPattern >>= 1;
                }
                return retval;
            };
            Func<int, int?> TryCut = (cutPattern) =>
            {
                var x = 0;
                var cnt = 0;
                //Console.WriteLine($"pattern {cutPattern}");
                while (true)
                {
                    var cutwN = TryCutOnce(cutPattern, x);
                    if (!cutwN.HasValue)
                        return null;
                    var cutw = cutwN.Value;
                    //Console.WriteLine($"cut {cutPattern} {x} {cnt} {cutw}");
                    if (cutw == int.MaxValue)
                        break;
                    x += cutw;
                    if (x == W)
                        break;
                    cnt += 1;
                }
                var patcnt = PatternToCutCount(cutPattern);
                //Console.WriteLine($"result {cnt} + {patcnt}");
                return cnt + patcnt;
            };

            var ret = int.MaxValue;
            for (var i = 0; i < Math.Pow(2, H-1); i++)
            {
                var x = TryCut(i);
                if (!x.HasValue)
                    continue;
                ret = Math.Min(ret, x.Value);
            }
            
            
            Console.WriteLine(ret);
        }

    }
}


Measured memory_bytes: 14036