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
#include <algorithm>
#include <cstdio>
using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define INT(x) int x; scanf("%d", &x)

char a[8001];
int s[8001][3];

int main() {
	INT(n);
	INT(k);
	INT(t);
	scanf("%s", a);
	REP(i,n) REP(j,3) s[i + 1][j] = s[i][j] + (j == a[i] - '1');
	int r = -1;
	int mi = max(s[n][0] + s[n][1] - k, 0);
	if (s[n][0] <= k) r = n - mi;
	REP(x,n-(t<<1)+1) FOR(y,x+t,n-t+1) {
		int hm = s[x][1] - s[0][1] +  + s[n][1] - s[y + t][1];
		int om = s[y][0] - s[x + t][0] + s[y][1] - s[x + t][1];
		if (hm + om < mi) continue;
		int rm = max(mi - om, 0);
		int h = n - (y + t) + x;
		r = max(r, h - rm);
	}
	printf("%d\n", r);
}