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 __future__ import division, print_function
  import math
  import sys
  import os
  from io import BytesIO, IOBase
  #from collections import deque, Counter, OrderedDict, defaultdict
  #import heapq
  #ceil,floor,log,sqrt,factorial,pow,pi,gcd
  #import bisect
  #from bisect import bisect_left,bisect_right
  
  BUFSIZE = 8192
  
  
  class FastIO(IOBase):
  	newlines = 0
  
  	def __init__(self, file):
  		self._fd = file.fileno()
  		self.buffer = BytesIO()
  		self.writable = "x" in file.mode or "r" not in file.mode
  		self.write = self.buffer.write if self.writable else None
  
  	def read(self):
  		while True:
  			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
  			if not b:
  				break
  			ptr = self.buffer.tell()
  			self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
  		self.newlines = 0
  		return self.buffer.read()
  
  	def readline(self):
  		while self.newlines == 0:
  			b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
  			self.newlines = b.count(b"\n") + (not b)
  			ptr = self.buffer.tell()
  			self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
  		self.newlines -= 1
  		return self.buffer.readline()
  
  	def flush(self):
  		if self.writable:
  			os.write(self._fd, self.buffer.getvalue())
  			self.buffer.truncate(0), self.buffer.seek(0)
  
  
  class IOWrapper(IOBase):
  	def __init__(self, file):
  		self.buffer = FastIO(file)
  		self.flush = self.buffer.flush
  		self.writable = self.buffer.writable
  		self.write = lambda s: self.buffer.write(s.encode("ascii"))
  		self.read = lambda: self.buffer.read().decode("ascii")
  		self.readline = lambda: self.buffer.readline().decode("ascii")
  
  
  def print(*args, **kwargs):
  	"""Prints the values to a stream, or to sys.stdout by default."""
  	sep, file = kwargs.pop("sep", " "), kwargs.pop("file", sys.stdout)
  	at_start = True
  	for x in args:
  		if not at_start:
  			file.write(sep)
  		file.write(str(x))
  		at_start = False
  	file.write(kwargs.pop("end", "\n"))
  	if kwargs.pop("flush", False):
  		file.flush()
  
  
  if sys.version_info[0] < 3:
  	sys.stdin, sys.stdout = FastIO(sys.stdin), FastIO(sys.stdout)
  else:
  	sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
  
  input = lambda: sys.stdin.readline().rstrip("\r\n")
  
  def inp():
      return(int(input()))
  def inps():
      return input().strip()
  def inlt():
      return(list(map(int,input().split())))
  def insr():
      s = input().strip()
      return(list(s[:len(s)]))
  def invr():
      return(map(int,input().split()))
  N=10000
  
  factorialNumInverse = [None] * (N + 1)
  naturalNumInverse = [None] * (N + 1)
  fact = [None] * (N + 1)
  def InverseofNumber(p):
      naturalNumInverse[0] = naturalNumInverse[1] = 1
      for i in range(2, N + 1, 1):
          naturalNumInverse[i] = (naturalNumInverse[p % i] *
                                     (p - int(p / i)) % p)
  def InverseofFactorial(p):
      factorialNumInverse[0] = factorialNumInverse[1] = 1
      for i in range(2, N + 1, 1):
          factorialNumInverse[i] = (naturalNumInverse[i] *
                                    factorialNumInverse[i - 1]) % p
   
  def factorial(p):
      fact[0] = 1
      for i in range(1, N + 1):
          fact[i] = (fact[i - 1] * i) % p
  
  mod=998244353
  InverseofNumber(mod)
  InverseofFactorial(mod)
  factorial(mod)
  F=fact
  I=factorialNumInverse
  n,k=invr()
  l=insr()
  arr=[-1]
  for i in range(n):
  	if l[i]=='1':
  		arr.append(i)
  arr.append(n)
  if k==0 or k>len(arr)-2:
  	print(1)
  else:
  	v=len(arr)
  	ans=0
  	for i in range(v-k-1):
  		l,r=arr[i],arr[i+k+1]
  		d=r-l-1
  		ans+=(F[d]*I[k]*I[d-k])
  		ans=ans%mod
  		if i>0:
  			e=arr[i+k]-l-1
  			ans-=(F[e]*I[k-1]*I[e-k+1])
  			ans=ans%mod
  	print(ans)