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
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>

#define maxn 8007
using namespace std;
char tasks[maxn];
//1-spotkanie w biurze
//2-spotkanie zdalne
//3-brak zadan
struct cal{
    long long b=0;
    long long z=0;
    long long w=0;
    
};


cal tab[maxn];



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

    long long n,k,t; //liczba segmentow, liczba spotkan ktore moze opuscic, czas przejazdu
    long long ileb=0, ilez=0,ilew=0;
    cin>>n>>k>>t;
    for(long long i=0;i<n;i++){
        cin>>tasks[i];
        if(tasks[i]=='1'){
            ileb++;
            if(i!=0){
                tab[i]=tab[i-1];
                tab[i].b++;
            }
            else{
                tab[i].b++;
            }
        }
        else if(tasks[i]=='2'){
            ilez++;
            if(i!=0){
                tab[i]=tab[i-1];
                tab[i].z++;
            }
            else{
                tab[i].z++;
            }
        }
        else{
            ilew++;
            if(i!=0){
                tab[i]=tab[i-1];
                tab[i].w++;
            }
            else{
                tab[i].w++;
            }
        }
        
    }
    
    long long na_ile_musi=ileb-k, ile_lacznie=ileb+ilez-k;
    if(ileb<=k){
        //k-=ileb;
        if(k>ileb+ilez){
            cout<<n;
            return 0;
        }
        cout<<n-ileb-ilez+k<<endl;
        return 0;
    }
    cal 
    ile_d_p,
    ile_d_l, 
    ile_s,
    ile_poz,
    ile_w;
    ile_w=tab[n-1];
    long long spotkania_s=0,kn,
    spotkania_d=0
    ;
    long long mam=-1,dr,dm,dz;
    for(long long i=0;i<n-2*t;i++){
        if(i!=0){
        ile_d_l.b=tab[i+t-1].b-tab[i-1].b;
        ile_d_l.z=tab[i+t-1].z-tab[i-1].z;
        ile_d_l.w=tab[i+t-1].w-tab[i-1].w;
        
        }
        else{
            ile_d_l.b=tab[i+t-1].b;
            ile_d_l.z=tab[i+t-1].z;
            ile_d_l.w=tab[i+t-1].w;
        }
        long long ile_jeszce;
        for(long long y=i+t;y<n-t+1;y++){
            ile_d_p.b=tab[y+t-1].b-tab[y-1].b;
            ile_d_p.z=tab[y+t-1].z-tab[y-1].z;
            ile_d_p.w=tab[y+t-1].w-tab[y-1].w;
            ile_s=tab[y-1];
            ile_s.b-=tab[i+t-1].b;
            ile_s.z-=tab[i+t-1].z;
            ile_s.w-=tab[i+t-1].w;
            // cout<<"i: "<<i<<" y: "<<y<<" iled " <<ile_d_l.b<<' '<<ile_d_l.z<<" iledp "<<ile_d_p.b<<' '<<ile_d_p.z<<" iles "  <<ile_s.b<<' '<<ile_s.z<<' '<<ile_s.w;
             dr=ile_d_l.b+ile_d_l.z+ile_d_p.b+ile_d_p.z;//spotkania w drodze
            dm=ile_w.b-ile_s.b-ile_d_l.b-ile_d_p.b;//spotkania w domu biurowe
            dz=ile_w.z-ile_s.z-ile_d_l.z-ile_d_p.z;//spotkania w domu zdalne
          //  cout<<" iledlb "<<ile_d_l.b<<" iledlz "<<ile_d_l.z<<" iledpb "<<ile_d_p.b<<" iledlz " <<ile_d_l.z;
          //  cout<<" dm: "<<dm<<" dz: "<<dz<<" dr: "<<dr<<'\n';
            if(dm+dr<=k){//jesli ilosc spotkan opuszczonych i spotkan w biurze podczas bycia w domu jest mniejsza niz dozwolona
                //na ilu spotkaniach bedzie iles.b+iles.z
                kn=k-dm-dr;//ile jeszcze moze opuscic
                dz-=kn;
                if(dz<0){
                    dz=0;
                }
                //czas wolny l = i-1
                //czas wolny p = n-1-y-t+1
                mam=max(mam,i+n-1-y-t+1-dz);
                //cout<<"X: "<<i+n-1-y-t+1-dz<<"X\n";
                
                //ile spotkan opusci w trakcie jazdy ile_d_l.b+ile_d_l.z+ile_d_p.b+ile_d_p.z
                //ile jeszcze mu zostaje spotkan do zrobienia ilew.z+ilew.b
                //
            }
        }
    }

    cout<<mam;
    






  
}