```go
package main
import (
"bufio"
"io"
"math/bits"
"os"
)
func main() {
data, _ := io.ReadAll(bufio.NewReaderSize(os.Stdin, 1<<20))
idx := 0
readInt := func() int {
n := len(data)
for idx < n && data[idx] <= ' ' {
idx++
}
sign := 1
if idx < n && data[idx] == '-' {
sign = -1
idx++
}
val := 0
for idx < n && data[idx] > ' ' {
val = val*10 + int(data[idx]-'0')
idx++
}
return sign * val
}
n := readInt()
k := readInt()
B := make([]int, n)
for i := 0; i < n; i++ {
B[i] = readInt()
}
const mBits = 1 << 20
res := make([]uint64, mBits>>6)
p := n - 1
for l := 0; l < n; l++ {
S := 0
for r := l; r < n; r++ {
if r > l {
S += B[r]
}
if S >= 20 {
break
}
limit := 1 << uint(20-S)
if B[l] < limit {
E := int64(B[l]) << uint(S)
idxE := int(E)
bc := 0
if l > 0 {
bc++
}
if r+1 < n {
bc++
}
u := p - (r-l) - bc
t := k - bc
ok := false
if u == 0 {
if t <= 0 {
ok = true
}
} else {
if t > 0 {
if ((t - 1) & u) == 0 {
ok = true
}
}
}
if ok {
res[idxE>>6] ^= 1 << (uint(idxE) & 63)
}
}
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
top := -1
for i := len(res) - 1; i >= 0; i-- {
if res[i] != 0 {
top = (i << 6) + (bits.Len64(res[i]) - 1)
break
}
}
if top < 0 {
out.WriteByte('0')
out.WriteByte('\n')
return
}
buf := make([]byte, top+1)
for i := top; i >= 0; i-- {
if (res[i>>6]>>uint(i&63))&1 == 1 {
buf[top-i] = '1'
} else {
buf[top-i] = '0'
}
}
out.Write(buf)
out.WriteByte('\n')
}
```