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 Fortran (gfortran v4.8.4) (judge verdict: Wrong Answer)

program handstand
  implicit none
  integer :: n, k, i, m, a(100000), r, x, y, z, t, j
  logical :: b(100000)
  character(100000) :: s
  a = 0
  b = .false.
  read(*,*) n, k
  if (n.eq.1) then
    write(*,'(i0)') 1
    stop
  end if
  read(*,*) s
  s = trim(adjustl(s))
  r = 1
  if (s(1:1).eq."0") r = -r
  a(1) = r
  x = -1
  y = -1
  do i = 2, n
    if (s(i:i).eq.s(i-1:i-1)) then
      a(i) = a(i-1) + r
    else
      b(i-1) = .true.
      if ((x.lt.0).and.(r.gt.0)) x = i-1
      if ((y.lt.0).and.(r.lt.0)) y = i-1
      r = -r
      a(i) = r
    end if
  end do
  b(n) = .true.
  if ((x.lt.0).or.(y.lt.0)) then
    write(*,'(i0)') abs(a(n))
    stop
  end if
  t = a(x)
  if (y.lt.x) then
    t = t - a(y)
    k = k - 1
  end if
  if ((k.gt.0).and.(n.gt.x)) then
    do i = x+1, n
      if (b(i)) then
        if (a(i).lt.0) then
          t = t - a(i)
          k = k - 1
        else
          t = t + a(i)
          z = i
          if (k.eq.0) exit
        end if
      end if
    end do
  end if
  m = t
  if (n.gt.z) then
    do i = z+1, n
      if (b(i)) then
        if (a(i).lt.0) then
          t = t + a(y) - a(i)
          if (x.lt.y) then
            t = t - a(x)
            do j = x+1, n
              if (b(j).and.a(j).gt.0) then
                x = j
                exit
              end if
            end do
          end if
          do j = y+1, n
            if (b(j).and.a(j).lt.0) then
              y = j
              exit
            end if
          end do
          if (m.lt.t) m = t
        else
          t = t + a(i)
          if (m.lt.t) m = t
        end if
      end if
    end do
  end if
  write(*,'(i0)') m
  stop
end program handstand