1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
x = input().split(" ")
n, k, t = int(x[0]), int(x[1]), int(x[2])
tab = [int(x) for x in input()]

prefix_tab_12 = [0]
for i in range(n):
    prefix_tab_12.append(prefix_tab_12[-1] + (1 if (tab[i] == 2 or tab[i] == 1) else 0))
prefix_tab_12.append(0)
prefix_tab_1 = [0]
for i in range(n):
    prefix_tab_1.append(prefix_tab_1[-1] + (1 if (tab[i] == 1) else 0))
prefix_tab_1.append(0)

prefix_tab_3 = [0]
for i in range(n):
    prefix_tab_3.append(prefix_tab_3[-1] + (1 if (tab[i] == 3) else 0))
prefix_tab_3.append(0)


m = -1

if prefix_tab_12[n] <= k:
    print(n)
    exit(0)

ct1 = prefix_tab_1[n]
if ct1<=k:
    print(prefix_tab_3[n]+k)
    exit(0)


for i in range(n-2*t+1):
    for j in range(i+t,n-t+1):
        if i+t>n:
            continue
        if j+t>n:
            continue
        if i+t>j:
            continue
        if prefix_tab_12[i+t]-prefix_tab_12[i] + prefix_tab_12[j+t]-prefix_tab_12[j]+prefix_tab_1[i]+prefix_tab_1[n] - prefix_tab_1[j+t]>k:
            continue
        missed_ = prefix_tab_12[i+t]-prefix_tab_12[i] + prefix_tab_12[j+t]-prefix_tab_12[j]
        possible_to_miss = k-missed_
        missed_at_home = min(possible_to_miss, prefix_tab_12[i]+prefix_tab_12[n]-prefix_tab_12[j+t])
        if prefix_tab_3[i]+prefix_tab_3[n] - prefix_tab_3[j+t]+missed_at_home>m:
            m = prefix_tab_3[i]+prefix_tab_3[n] - prefix_tab_3[j+t]+missed_at_home
        break

print(m)