description: You are given a binary string (i. e. a string consisting of characters 0 and/or 1) s of length n. You can perform the following operation with the string s at most once: choose a substring (a contiguous subsequence) of s having exactly k characters 1 in it, and shuffle it (reorder the characters in the substring as you wish).
  
  Calculate the number of different strings which can be obtained from s by performing this operation at most once.
  
  Input
  
  The first line contains two integers n and k (2 ≤ n ≤ 5000; 0 ≤ k ≤ n).
  
  The second line contains the string s of length n, consisting of characters 0 and/or 1.
  
  Output
  
  Print one integer — the number of different strings which can be obtained from s by performing the described operation at most once. Since the answer can be large, output it modulo 998244353.
  
  Examples
  
  Input
  
  
  7 2
  1100110
  
  
  Output
  
  
  16
  
  
  Input
  
  
  5 0
  10010
  
  
  Output
  
  
  1
  
  
  Input
  
  
  8 1
  10001000
  
  
  Output
  
  
  10
  
  
  Input
  
  
  10 8
  0010011000
  
  
  Output
  
  
  1
  
  Note
  
  Some strings you can obtain in the first example:
  
    * to obtain 0110110, you can take the substring from the 1-st character to the 4-th character, which is 1100, and reorder its characters to get 0110; 
    * to obtain 1111000, you can take the substring from the 3-rd character to the 7-th character, which is 00110, and reorder its characters to get 11000; 
    * to obtain 1100101, you can take the substring from the 5-th character to the 7-th character, which is 110, and reorder its characters to get 101. 
  
  
  
  In the second example, k = 0 so you can only choose the substrings consisting only of 0 characters. Reordering them doesn't change the string at all, so the only string you can obtain is 10010.
solution: from sys import stdin
  input = stdin.readline
  
  
  mod = 998244353
  def add(a , b):return ((a%mod) + (b%mod))%mod
  def sub(a , b):return (a - b + mod)%mod
  def mul(a , b):return ((a%mod) * (b%mod))%mod
  def div(a , b):return mul(a , pow(b , mod - 2 , mod))
  
  size = 5001
  fact , facti = [1] , [1]
  for i in range(1 , size):
      fact.append(mul(fact[-1] , i))
      facti.append(pow(fact[-1] , mod - 2 , mod))
  
  
  def get(n , x , y):
  
      ans = mul(fact[n] , mul(facti[x] , facti[y]))
      return ans
  
  def answer():
     
      ans , prevupper , i = 1 , -1 , 0
      for i in range(n):
  
          count , upper = 0 , -1
          for j in range(i , n):
              if(a[j] == '1'):count += 1
              if(count == (k + 1)):
                  upper = j - 1
                  break
  
          if(count == k):upper = n - 1
          if(upper == -1):break
  
          ans = add(ans , get(upper - i + 1 , k , (upper - i + 1) - k))
  
          if(prevupper > i):
  
              x , y = 0 , 0
              for j in range(i , prevupper + 1):
                  x += (a[j] == '1')
                  y += (a[j] == '0')
              
              ans = sub(ans , get(prevupper - i + 1 , x , y))
          else:
              ans = sub(ans , 1)
  
  
          prevupper = upper
  
      return ans
          
  
  for T in range(1):
  
      n , k = map(int,input().split())
      a = input().strip()
      
      print(answer())
  