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


using namespace std;


int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int n,k,t;
	cin >> n >> k >> t;
	vector<vector<int>> pref(3, vector<int>(n+2));
	vector<vector<int>> suf(3, vector<int>(n+2));
	vector<int> a(n+1);
	int ans = -1;
	char c;
	for (int i = 1; i <= n; i++){
		cin >> c;
		a[i] = c - '1';
	}
	for (int l = 0; l < 3; l++){
		for (int i = 1; i <= n; i++){
			pref[l][i] = (a[i]==l);
			pref[l][i] += pref[l][i-1];
		}
		for (int i = n; i >= 1; i--){
			suf[l][i] = (a[i]==l);
			suf[l][i] += suf[l][i+1];
	}
	}
	// nie jedziemy do biura
	if (pref[0][n] <= k){
		ans = max(ans, pref[2][n] + min(pref[1][n]+pref[0][n], k));
	}	
	for (int i = 1; i + t - 1 <= n; i++){
		for (int j = i+1; j+t-1 <= n; j++){
			int bef = pref[0][i+t-1] + (pref[1][i+t-1] - pref[1][i-1]);
			int aft = suf[0][j] + (suf[1][j] - suf[1][j+t]);
			//cout << i << " " << j << " " << bef << " " << aft << "\n";
			if ((bef+aft) > k) continue;
			ans = max(ans, pref[2][i-1] + suf[2][j+t] + pref[0][i-1] + suf[0][j+t] + min(pref[1][i-1]+suf[1][j+t], k - (bef+aft)));
		}
	}
	cout << ans; 		
	return 0;
}