from itertools import combinations

h, w, k = list(map(int, input().split()))

S = [list(map(int, list(eval(input())))) for _ in range(h)]



ans = 10 ** 9

# Hが10なので横の割り方は決め打ち、縦は貪欲にKを見る。最小の数が答え。



for i in range(2 ** (h - 1)):

  # 割った後の各かたまりの白チョコ数を入れる箱

  box = [[0] * w]

  # bcnt: 横に割ったかたまりの番地を数える数

  bcnt = 0

  box[bcnt] = [s + b for s, b in zip(S[0], box[bcnt])]



  for j in range(1, h):

    if (i >> (j-1)) & 1:

      bcnt += 1

      box.append([0] * w)

    box[bcnt] = [s + b for s, b in zip(S[j], box[bcnt])]

  

  # kよりも大きな区間が一つでもあればNG

  if not all([all([i <= k for i in b]) for b in box]):

    continue



  cutcnt = len(box) - 1

  cnt = [0] * len(box)

  for m in range(w):

    for n in range(len(box)):

      cnt[n] += box[n][m]

    if any([c > k for c in cnt]):

      cutcnt += 1

      for n in range(len(box)):

        cnt[n] = box[n][m]

  ans = min(ans, cutcnt)



print(ans)

 
h, w, k = list(map(int, input().split()))

S = [list(map(int, list(eval(input())))) for _ in range(h)]



ans = 10 ** 9

# Hが10なので横の割り方は決め打ち、縦は貪欲にKを見る。最小の数が答え。



for i in range(2 ** (h - 1)):

  # box: 割った後の各かたまりの白チョコ数を入れる箱

  box = [[0] * w]

  # bcnt: 横に割ったかたまりの番地を数える数

  bcnt = 0

  box[bcnt] = [s + b for s, b in zip(S[0], box[bcnt])]



  for j in range(1, h):

    if (i >> (j-1)) & 1:

      bcnt += 1

      box.append([0] * w)

    box[bcnt] = [s + b for s, b in zip(S[j], box[bcnt])]

  

  # kよりも大きな区間が一つでもあればNG

  if not all([all([i <= k for i in b]) for b in box]):

    continue



  # cutcnt: 分割回数。最小値がansとなる。

  cutcnt = len(box) - 1

  # cnt: そのかたまりでのホワイトチョコの数を数える箱。毎回更新する。（直近分しか保持しない）

  cnt = [0] * len(box)

  for m in range(w):

    for n in range(len(box)):

      cnt[n] += box[n][m]

    # 一つでもkを超えたら縦に割る。

    if any([c > k for c in cnt]):

      cutcnt += 1

      for n in range(len(box)):

        cnt[n] = box[n][m]

  ans = min(ans, cutcnt)



print(ans)

 
from itertools import combinations

h, w, k = list(map(int, input().split()))
S = [list(map(int, list(eval(input())))) for _ in range(h)]
ans = 10**9
# Hが10なので横の割り方は決め打ち、縦は貪欲にKを見る。最小の数が答え。
for i in range(2 ** (h - 1)):
    # 割った後の各かたまりの白チョコ数を入れる箱
    box = [[0] * w]
    # bcnt: 横に割ったかたまりの番地を数える数
    bcnt = 0
    box[bcnt] = [s + b for s, b in zip(S[0], box[bcnt])]
    for j in range(1, h):
        if (i >> (j - 1)) & 1:
            bcnt += 1
            box.append([0] * w)
        box[bcnt] = [s + b for s, b in zip(S[j], box[bcnt])]
    # kよりも大きな区間が一つでもあればNG
    if not all([all([i <= k for i in b]) for b in box]):
        continue
    cutcnt = len(box) - 1
    cnt = [0] * len(box)
    for m in range(w):
        for n in range(len(box)):
            cnt[n] += box[n][m]
        if any([c > k for c in cnt]):
            cutcnt += 1
            for n in range(len(box)):
                cnt[n] = box[n][m]
    ans = min(ans, cutcnt)
print(ans)

h, w, k = list(map(int, input().split()))
S = [list(map(int, list(eval(input())))) for _ in range(h)]
ans = 10**9
# Hが10なので横の割り方は決め打ち、縦は貪欲にKを見る。最小の数が答え。
for i in range(2 ** (h - 1)):
    # box: 割った後の各かたまりの白チョコ数を入れる箱
    box = [[0] * w]
    # bcnt: 横に割ったかたまりの番地を数える数
    bcnt = 0
    box[bcnt] = [s + b for s, b in zip(S[0], box[bcnt])]
    for j in range(1, h):
        if (i >> (j - 1)) & 1:
            bcnt += 1
            box.append([0] * w)
        box[bcnt] = [s + b for s, b in zip(S[j], box[bcnt])]
    # kよりも大きな区間が一つでもあればNG
    if not all([all([i <= k for i in b]) for b in box]):
        continue
    # cutcnt: 分割回数。最小値がansとなる。
    cutcnt = len(box) - 1
    # cnt: そのかたまりでのホワイトチョコの数を数える箱。毎回更新する。（直近分しか保持しない）
    cnt = [0] * len(box)
    for m in range(w):
        for n in range(len(box)):
            cnt[n] += box[n][m]
        # 一つでもkを超えたら縦に割る。
        if any([c > k for c in cnt]):
            cutcnt += 1
            for n in range(len(box)):
                cnt[n] = box[n][m]
    ans = min(ans, cutcnt)
print(ans)

-from itertools import combinations - -    # 割った後の各かたまりの白チョコ数を入れる箱 +    # box: 割った後の各かたまりの白チョコ数を入れる箱 +    # cutcnt: 分割回数。最小値がansとなる。 +    # cnt: そのかたまりでのホワイトチョコの数を数える箱。毎回更新する。（直近分しか保持しない） +        # 一つでもkを超えたら縦に割る。