Problem:
Score : 400 points

Problem Statement

N people are arranged in a row from left to right.

You are given a string S of length N consisting of 0 and 1, and a positive integer K.

The i-th person from the left is standing on feet if the i-th character of S is 0, and standing on hands if that character is 1.

You will give the following direction at most K times (possibly zero):

Direction: Choose integers l and r satisfying 1 \leq l \leq r \leq N, and flip the l-th, (l+1)-th, ..., and r-th persons. That is, for each i = l, l+1, ..., r, the i-th person from the left now stands on hands if he/she was standing on feet, and stands on feet if he/she was standing on hands.

Find the maximum possible number of consecutive people standing on hands after at most K directions.

Constraints

N is an integer satisfying 1 \leq N \leq 10^5.

K is an integer satisfying 1 \leq K \leq 10^5.

The length of the string S is N.

Each character of the string S is 0 or 1.

Input

Input is given from Standard Input in the following format:

N K
S

Output

Print the maximum possible number of consecutive people standing on hands after at most K directions.

Sample Input 1

5 1
00010

Sample Output 1

4

We can have four consecutive people standing on hands, which is the maximum result, by giving the following direction:

Give the direction with l = 1, r = 3, which flips the first, second and third persons from the left.

Sample Input 2

14 2
11101010110011

Sample Output 2

8

Sample Input 3

1 1
1

Sample Output 3

1

No directions are necessary.

Solution in Ruby (2.3.3) (judge verdict: Accepted)

nk = gets.split.map(&:to_i)
s = gets.chomp
s_run = []
l = s.length
count = 0
c_max = 0
c_flag = 0

# for i in 0 .. l - 1
#   if s[i] == "1" && c_flag == nk[1] - 1
#     count += 1
#     if count > c_max
#       c_max = count
#     end
#     count = 1
#     c_flag = 0
#   elsif s[i] == "1"
#     count += 1
#     c_flag += 1
#   elsif s[i] == "0"
#     count += 1
#   end
# end

s_run_index = 0

if s[0] == "0"
  s_run[0] = [1,0]
  s_run_index = 1
  for i in 0 .. l - 1
    if i == 0
      count += 1
    else
    if s[i] == "0" && s[i - 1] == "1"
      s_run[s_run_index] = [1,count]
      s_run_index += 1
      count = 0
    end
    if s[i] == "1" && s[i - 1] == "0"
      s_run[s_run_index] = [0,count]
      s_run_index += 1
      count = 0
    end
    if i == l - 1
      s_run[s_run_index] = [s[i].to_i, count + 1]
    end
    count += 1
  end
  end
else
  for i in 0 .. l - 1
    if i == 0
      count += 1
    else
    if s[i] == "0" && s[i - 1] == "1"
      s_run[s_run_index] = [1,count]
      s_run_index += 1
      count = 0
    end
    if s[i] == "1" && s[i - 1] == "0"
      s_run[s_run_index] = [0,count]
      s_run_index += 1
      count = 0
    end
    if i == l - 1
      s_run[s_run_index] = [s[i].to_i, count + 1]
    end
    count += 1
  end
  end
end

s_run[s_run.length] = [1,0]

sum_max = 0
# puts s_run

if s_run.length < 2 * nk[1] + 1
  sum_max = s.length
else

for i in 0 .. 2 * nk[1]
  sum_max += s_run[i][1]
  sum = sum_max
end
# puts sum

i = 2 * nk[1] + 1
while i < s_run.length - 1
  sum = sum - s_run[i - (2 * nk[1] + 1)][1] - s_run[i - (2*nk[1])][1] + s_run[i][1] + s_run[i+1][1]
  if sum > sum_max
    sum_max = sum
  end
  i += 2
end
end

# for i in 2 * nk[1] + 1 .. (s_run.length - 1) - (2 *nk[1] + 1)
#   sum = sum - s_run[i - (2 * nk[1] + 1)][1] - s_run[i - (2*nk[1])][1] + s_run[i][1] + s_run[i+1][1]
#   if sum > sum_max
#     print i," ", sum
#     sum_max = sum
#   end
#   puts sum_max
# end
# end



puts sum_max