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
#include <bits/stdc++.h>
#include <climits>

using namespace std;
const int MX = 8009;
int sum[MX][4];
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n, k, d, res = -1; cin >> n >> k >> d;
    for(auto i = 1; i <= n; ++i){
        char c; cin >> c;
        for(auto j = 1; j <= 3; ++j) sum[i][j] = sum[i-1][j];
        sum[i][c-'0']++;
    }
    for(auto i = 1; i <= n-2*d+1; ++i){
        for(auto j = i+2*d-1; j <= n; ++j){
            int skipped = sum[n][1];
            skipped -= sum[j-d][1]-sum[i+d-1][1];
            skipped += sum[j][2]+sum[i+d-1][2]-sum[j-d][2]-sum[i-1][2];
            int taken = sum[n][3]+sum[n][1];
            taken -= sum[j][3]+sum[j][1]-sum[i-1][3]-sum[i-1][1];
            if(skipped > k) continue;
            int bonus = sum[n][2];
            bonus -= sum[j][2]-sum[i-1][2];
            res = max(res, taken + min(bonus, k-skipped));
            // cout << i << " " << j << " " << skipped << " " << taken << endl;
        }
    }
    if(sum[n][1] <= k){
        res = max(res, sum[n][3]+sum[n][1]+min(sum[n][2], k-sum[n][1]));
        // cout << 0 << " " << 0 << sum[n][3]+sum[n][1]+min(sum[n][2], k-sum[n][1]) << endl;
    }
    cout << res << endl;
}