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;

constexpr int maxn = 8002;

int wolne[maxn], biuro[maxn], online[maxn];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int n,k,t; cin >> n >> k >> t;
	string s; cin >> s; s = '#'+s;
	for(int i=1; i<=n; i++)
	{
		wolne[i]=wolne[i-1]; biuro[i]=biuro[i-1]; online[i]=online[i-1];
		if(s[i] == '3') wolne[i]++;
		else if(s[i] == '2') online[i]++;
		else biuro[i]++;
	}

  int ret = -1;
  if(biuro[n] <= k)
  {
    int act = wolne[n]+biuro[n];
    act += min(k-biuro[n],online[n]);
    ret = max(ret, act);
  }
  for(int m=2*t+1; m<=n; m++)
  {
    for(int i=m; i<=n; i++)
    {
      int lf = k-(biuro[n]-(biuro[i-t]-biuro[i-m+t]));
      lf -= ((online[i]-online[i-t])+(online[i-m+t]-online[i-m]));
      if(lf < 0) continue;
      int tmp = (online[n]-online[i])+online[i-m];
      int act = ((wolne[n]-wolne[i])+wolne[i-m]);
      act += ((biuro[n]-biuro[i])+biuro[i-m]);
      act += min(lf, tmp);
      ret = max(ret, act);
    }
  }
  cout << ret << '\n';
}