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
60
61
62
63
64
65
#include <iostream>


using namespace std;

const int MAXN = 10000;

int tab[MAXN][4];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, k, t;

    cin >> n >> k >> t;

    char c;
    int ile2 = 0, ile1 = 0;

    for (int i = 1; i <= n; i++){
        cin >> c;
        if (c == '2') ile2++;
        if (c == '1') ile1++;
        tab[i][1] = tab[i - 1][1];
        tab[i][2] = tab[i - 1][2];
        tab[i][3] = tab[i - 1][3];
        tab[i][c - '0']++;
    }


    int wynik = -1;

    for (int i = 1; i <= n; i++){

        for (int j = i; j <= n; j++){
            if (j - i + 1 < 2 * t) continue;
            int ileWsrodku = 0;
            ileWsrodku += (tab[j - t][1] - tab[i + t - 1][1]);
            ileWsrodku += tab[j - t][2] - tab[i + t - 1][2];

            int ileMinimumSpotkan = ile2 + ile1 - k;
            int lacznie = ileWsrodku + tab[i - 1][2] + tab[n][2] - tab[j][2];


            if (!(lacznie >= ileMinimumSpotkan)) continue;

            ileMinimumSpotkan -= ileWsrodku;

            wynik = max(wynik, n - (j - i + 1) - max(0, ileMinimumSpotkan));


        }
    }

    if (ile2 >= (ile2 + ile1 - k)){
        wynik = max(wynik, n - max(ile2 + ile1 - k, 0));
    }

    cout << wynik << '\n';



    return 0;
}