local mmi, mma = math.min, math.max
local bls, brs = bit.lshift, bit.rshift
local h, w, k = io.read("*n", "*n", "*n", "*l")
local map = {}
for i = 1, h do
  local s = io.read()
  for j = 1, w do
    local ss = s:sub(j, j)
    map[(i - 1) * w + j] = ss == "1"
  end
end
local ans = false
local tot = 2^(h - 1)
for it = 0, tot - 1 do
  local tmpi = it
  local box = {1}
  local pos = 1
  for j = 2, h do
    if it % 2 == 1 then
      pos = pos + 1
    end
    box[j] = pos
    it = brs(it, 1)
  end
  local bsize = pos
  local ret = bsize - 1
  -- print(tmpi, ret)
  local bcnt = {}
  for i = 1, bsize do
    bcnt[i] = 0
  end
  local valid = true
  local start_w = 1
  for j = 1, w do
    for i = 1, h do
      local idx = (i - 1) * w + j
      if map[idx] then
        bcnt[box[i]] = bcnt[box[i]] + 1
      end
    end
    local over = false
    for ib = 1, bsize do
      if k < bcnt[ib] then
        over = true
        break
      end
    end
    if over then
      if start_w == j then
        valid = false
        break
      end
      start_w = j
      ret = ret + 1
      for ib = 1, bsize do
        bcnt[ib] = 0
      end
      for i = 1, h do
        local idx = (i - 1) * w + j
        if map[idx] then
          bcnt[box[i]] = bcnt[box[i]] + 1
        end
      end
    end
  end
  if valid then
    if not ans then ans = ret
    else ans = mmi(ans, ret)
    end
  end
end
print(ans)
