```go
package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 998244353
func power(a, b int64) int64 {
var res int64 = 1
a %= MOD
for b > 0 {
if b%2 == 1 {
res = (res * a) % MOD
}
a = (a * a) % MOD
b /= 2
}
return res
}
func main() {
reader := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, k int
if _, err := fmt.Fscan(reader, &n, &k); err != nil {
return
}
var s string
if _, err := fmt.Fscan(reader, &s); err != nil {
return
}
ones := make([]int, 0, n)
for i, c := range s {
if c == '1' {
ones = append(ones, i)
}
}
m := len(ones)
if k == 0 || k > m {
fmt.Fprintln(out, 1)
return
}
fact := make([]int64, n+1)
invFact := make([]int64, n+1)
fact[0] = 1
invFact[0] = 1
for i := 1; i <= n; i++ {
fact[i] = (fact[i-1] * int64(i)) % MOD
}
invFact[n] = power(fact[n], MOD-2)
for i := n - 1; i >= 1; i-- {
invFact[i] = (invFact[i+1] * int64(i+1)) % MOD
}
nCr := func(n, r int) int64 {
if r < 0 || r > n {
return 0
}
return fact[n] * invFact[r] % MOD * invFact[n-r] % MOD
}
P := make([]int, m+2)
P[0] = -1
for i := 0; i < m; i++ {
P[i+1] = ones[i]
}
P[m+1] = n
var ans int64 = 0
for i := 0; i <= m-k; i++ {
length := P[i+k+1] - P[i] - 1
ans = (ans + nCr(length, k)) % MOD
}
for i := 0; i < m-k; i++ {
length := P[i+k+1] - P[i+1] - 1
ans = (ans - nCr(length, k-1) + MOD) % MOD
}
fmt.Fprintln(out, ans)
}
```