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
66
67
// https://sio2.mimuw.edu.pl/c/pa-2025-1/p/pra/
#include <bits/stdc++.h>
#define st first
#define nd second
#define pb push_back
#define all(x) x.begin(), x.end()
#define rep(i, a) for (int i = 0; i < int(a); i++)
#define rep1(i, a) for (int i = 1; i <= int(a); i++)
#define los(a, b) (rng() % (int)(b - a + 1) + (int)(a))
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
const int MAXN = 8005;
int pref[3][MAXN];
int n, k, t;
int ans(int a, int b) { // przedzial w firmie
    // cerr << "ans " << a << ' ' << b << '\n';
    int skip = pref[0][a - 1] + pref[0][n] - pref[0][b];
    // cerr << " " << skip << "\n";
    skip += pref[1][a - 1] - pref[1][a - t - 1] + pref[1][b + t] - pref[1][b];
    // cerr << "  " << skip << "\n";
    if (skip > k)
        return -1;
    // cerr << pref[2][a - t - 1] << "+" << pref[2][n] << "-" << pref[2][b + t]
    //      << "  +  "
    //      << min(k - skip, pref[0][a - t - 1] +
    //                           (pref[0][n] - pref[0][b + t + 1]) +
    //                           (pref[0][a - 1] + pref[0][n] - pref[0][b]))
    //      << '\n';
    return (pref[2][a - t - 1] + pref[2][n] - pref[2][b + t]) +
           (pref[0][a - t - 1] + pref[0][n] - pref[0][b + t]) +
           min(k - skip, pref[1][a - t - 1] + pref[1][n] - pref[1][b + t]);
}
int main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> k >> t;
    string s;
    cin >> s;
    // cerr << "xd\n";
    rep1(i, n) {
        pref[0][i] = pref[0][i - 1];
        pref[1][i] = pref[1][i - 1];
        pref[2][i] = pref[2][i - 1];
        pref[s[i - 1] - '1'][i]++;
    }
    // cerr << "xd\n";
    int res = -1;
    if (k >= pref[0][n])
        res = pref[2][n] + min(pref[1][n] + pref[0][n], k);
    // cerr << "res " << res << '\n';
    for (int i = t + 1; i <= n - t; i++) {
        // cerr << "i: " << i << '\n';
        for (int j = i; j <= n - t; j++) {
            res = max(res, ans(i, j));
        }
    }
    cout << res << '\n';
    // cerr << ans(3, 5) << '\n';
}
/*
10 1 2
3233313132

10 1 2
323 33 1 31 32
- -         -
*/