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

const int N = 1e6 + 5;

#define st first
#define nd second

typedef pair<int,int> pun;
typedef long long ll;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n, k, t;
	cin >> n >> k >> t;
	string s, sin;
	cin >> sin;
	s = "$" + sin;
	int score = -1;

	vector<vector<int>> pre, suf;
	pre.resize(3);
	suf.resize(3);
	for (int i = 0; i < 3; i ++) {
		pre[i].resize(n+2, 0);
		suf[i].resize(n+2, 0);
	}
	for (int i = 1; i <= n; i ++) {
		for (int j = 0; j < 3; j ++) pre[j][i] = pre[j][i-1];
		pre[s[i] -'1'][i] ++;
	}

	for (int i = n; i > 0; i --) {
		for (int j = 0; j < 3; j ++) suf[j][i] = suf[j][i+1];
		suf[s[i] -'1'][i] ++;
	}


	for (int i = 0; i <= n; i ++) {
		for (int j = i + t; j + t  <= n+1; j ++) {
			int missed = pre[0][i+t] + suf[0][j] + (pre[1][i+t] - pre[1][i]) + (suf[1][j] - suf[1][j+t]);
			int gained = pre[0][i] + suf[0][j+t] + pre[2][i] + suf[2][j+t];
//			cerr << i << " " << j << " " << missed << " " << gained << "\n";
			if (missed <= k) score = max(score, gained);

		}
	}

	if (pre[0][n] <= k) score = max(score, n - max(0, pre[1][n] + pre[0][n] - k));
	cout << score;

}