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
50
51
52
53
54
55
56
57
58
in1 = input().split()
n = int(in1[0])
k = int(in1[1])
t = int(in1[2])
in2 = input()
inint = []
a = [0, 0, 0, 0]
found = -1

for x in in2:
    act = int(x)
    inint.append(act)
    a[act] += 1

if k >= a[1]:
    print(a[3] + min(a[2] + a[1], k))
    quit()

hl = [0, 0, 0, 0]
rl = [0, 0, 0, 0]
for xx in range(t - 1):
    rl[inint[xx]] += 1

for rls in range(n - t):
    rl[inint[rls + t - 1]] += 1
    w = [0, a[1] - hl[1] - rl[1], a[2] - hl[2] - rl[2], a[3] - hl[3] - rl[3]]
    rr = [0, 0, 0, 0]
    hr = [0, 0, 0, 0]

    for xx in range(n - t + 1, n):
        act = inint[xx]
        w[act] -= 1
        rr[act] += 1

    for rrs in range(n - t, t, -1):
        act = inint[rrs]
        w[act] -= 1
        rr[act] += 1

        opuszczone = hl[1] + rl[1] + rl[2] + rr[1] + rr[2] + hr[1]
        if opuszczone <= k:
            zapas = k - opuszczone
            wagary = min(zapas, hl[2] + hr[2])
            nn = wagary + hl[1] + hr[1] + hl[3] + hr[3]
            found = max(found, nn)

        act2 = inint[rrs + t - 1]
        rr[act2] -= 1
        hr[act2] += 1

    act3 = inint[rls]
    hl[act3] += 1
    rl[act3] -= 1

# 1. spotkanie w biurze,
# 2. zdalne spotkanie,
# 3. brak obowiązków.
print(found)