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
59
#include <bits/stdc++.h>
using namespace std;

int n, max_skips, t_do_pracy; 
string harmonogram;

inline bool spotkanie(char i) {return (i == '1' || i == '2');}

int zlicz_wymuszone_pominiecia(int p, int q) { // spotkania wymuszone przez jazde, spotkania biurowe pominiete przez bycie w domu
    int ans = 0;
    for (int i = 0; i < min(n, p); i++) if (harmonogram[i] == '1') ans++;
    for (int i = p; i < min(n, p + t_do_pracy); i++) if (harmonogram[i] == '1' || harmonogram[i] == '2') ans++;
    for (int i = q; i < min(n, q + t_do_pracy); i++) if (harmonogram[i] == '1' || harmonogram[i] == '2') ans++;
    for (int i = q + t_do_pracy; i < n; i++) if (harmonogram[i] == '1') ans++;

    return ans;
}

int zlicz_zadania(int p, int q) { // wyjazd do biura | powrót do domu
    int pominietych = zlicz_wymuszone_pominiecia(p, q);
    int ans = 0;

    
    for (int i = 0; i < min(n, p); i++) { // w domu
        if (harmonogram[i] == '3' || harmonogram[i] == '1') ans++;
        else if (harmonogram[i] == '2' && pominietych < max_skips) {ans++; pominietych++;}
    }
    
    for (int i = q + t_do_pracy; i < n; i++) {
        if (harmonogram[i] == '3' || harmonogram[i] == '1') ans++;
        else if (harmonogram[i] == '2' && pominietych < max_skips) {ans++; pominietych++;}
    }

    if (pominietych > max_skips) return -1;
    //cerr << " POMINIETE SPOTKANIA: " << pominietych << " WYKONANE ZADANIA: " << ans << "\n";
    
    return ans;
}

int wszystkie_mozliwosci() {
    int ans = max(-1, zlicz_zadania(n+1, n+1));
    for (int i = 0; i <= n - 2*t_do_pracy; i++) {
        for (int j = i + t_do_pracy; j <= n - t_do_pracy; j++) {
            //cerr << "DROGA DO PRACY: [" << i << ", " << i + t_do_pracy-1 << "] POWROT: [" << j << ", " << j + t_do_pracy-1 << "]";
            ans = max(ans, zlicz_zadania(i, j));
            zlicz_zadania(i, j);
        }
    }

    return ans;
}

int main() {
    cin >> n >> max_skips >> t_do_pracy >> harmonogram;

    cout << wszystkie_mozliwosci();

    return 0;
}