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
#include <bits/stdc++.h>
using namespace std;
int main(){
 cin.tie(0)->sync_with_stdio(0);
 int nn, kk, tt;
 cin >> nn >> kk >> tt;
 string ss;
 cin >> ss;
 vector<int> v1(nn+1,0), v2(nn+1,0), v3(nn+1,0);
 for (int ii = 1; ii <= nn; ii++){
  v1[ii] = v1[ii-1] + (ss[ii-1]=='1');
  v2[ii] = v2[ii-1] + (ss[ii-1]=='2');
  v3[ii] = v3[ii-1] + (ss[ii-1]=='3');
 }
 auto su = [&](const vector<int>& v, int l, int r)->int {
  return (l > r ? 0 : v[r]-v[l-1]);
 };
 long long an = -1;
 int t1 = su(v1,1,nn);
 if(t1 <= kk){
  int t2 = su(v2,1,nn), t3 = su(v3,1,nn);
  int ad = min(t2, kk-t1);
  an = max(an, (long long)t3 + t1 + ad);
 }
 for (int xx = 1; xx <= nn-2*tt+1; xx++){
  for (int yy = xx+tt; yy <= nn-tt+1; yy++){
   int h1 = su(v1,1,xx-1), h2 = su(v2,1,xx-1), h3 = su(v3,1,xx-1);
   int r1 = su(v1,yy+tt,nn), r2 = su(v2,yy+tt,nn), r3 = su(v3,yy+tt,nn);
   int m1 = h1 + r1, m2 = h2 + r2, m3 = h3 + r3;
   int d1 = su(v1,xx,xx+tt-1) + su(v1,yy,yy+tt-1);
   int d2 = su(v2,xx,xx+tt-1) + su(v2,yy,yy+tt-1);
   int rd = d1 + d2;
   if(m1 + rd > kk) continue;
   int av = kk - (m1 + rd);
   int ex = min(m2, av);
   int sm = m3 + m1 + ex;
   an = max(an, (long long)sm);
  }
 }
 cout << an;
 return 0;
}