#include<bits/stdc++.h>
using namespace std;
int a[2000007], temp[2000007], seg[4000007];
int maketree(int low, int high, int pos,int array[])
{
if(low == high)
{
seg[low] = temp[low];
return 0;
}
int mid = (low + high) / 2;
maketree(low, mid, pos*2 + 1, array);
maketree(mid + 1, high, pos * 2 + 2, array);
seg[pos] = max(seg[2* pos + 1], seg[2 * pos + 2]);
}
int query(int low, int high, int qlow, int qhigh, int pos)
{
if(qlow <= low && high <= qhigh)
return seg[pos];
if(qlow > high || qhigh < low)
return INT_MIN;
int mid = (low + high) / 2;
return max(query(low, mid, qlow, qhigh, pos*2 + 1), query(mid + 1, high, qlow, qhigh, pos * 2 + 2));
}
int main()
{
int n, k, p, cnt = 0;
cin>>n>>k>>p;
memset(a, 0, sizeof(a));
for(int i = 0; i < n; i++)
{
cin>>a[i];
if(a[i] == 1)
cnt++;
a[i + n] = a[i];
}
temp[2*n] = 0;
for(int i = 2 * n - 1; i >= 0; i--)
temp[i] = temp[i + 1] - a[i + k] + a[i];
maketree(0, 2 * n - 1, 0, temp);
string s;
cin>>s;
int size = s.length(), start = n;
for(int i = 0; i < size; i++)
{
if(s[i] == '!')
{
start = start - 1;
if(start == 0) start = n;
}
else
{
if(k >= n)
cout<<cnt<<"\n";
else
{
int ans = query(0, 2 * n - 1, start, min(2 * n -1, start + k - 1), 0);
cout<<ans<<"\n";
}
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBhWzIwMDAwMDddLCB0ZW1wWzIwMDAwMDddLCBzZWdbNDAwMDAwN107CgppbnQgbWFrZXRyZWUoaW50IGxvdywgaW50IGhpZ2gsIGludCBwb3MsaW50IGFycmF5W10pCnsKICAgIGlmKGxvdyA9PSBoaWdoKSAKICAgIHsKICAgICAgICBzZWdbbG93XSA9IHRlbXBbbG93XTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKCiAgICBtYWtldHJlZShsb3csIG1pZCwgcG9zKjIgKyAxLCBhcnJheSk7CiAgICBtYWtldHJlZShtaWQgKyAxLCBoaWdoLCBwb3MgKiAyICsgMiwgYXJyYXkpOwoKICAgIHNlZ1twb3NdID0gbWF4KHNlZ1syKiBwb3MgKyAxXSwgc2VnWzIgKiBwb3MgKyAyXSk7Cn0KCmludCBxdWVyeShpbnQgbG93LCBpbnQgaGlnaCwgaW50IHFsb3csIGludCBxaGlnaCwgaW50IHBvcykKewogICAgaWYocWxvdyA8PSBsb3cgJiYgaGlnaCA8PSBxaGlnaCkKICAgICAgICByZXR1cm4gc2VnW3Bvc107CgogICAgaWYocWxvdyA+IGhpZ2ggfHwgcWhpZ2ggPCBsb3cpCiAgICAgICAgcmV0dXJuIElOVF9NSU47CgogICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CgogICAgcmV0dXJuIG1heChxdWVyeShsb3csIG1pZCwgcWxvdywgcWhpZ2gsIHBvcyoyICsgMSksIHF1ZXJ5KG1pZCArIDEsIGhpZ2gsIHFsb3csIHFoaWdoLCBwb3MgKiAyICsgMikpOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBuLCBrLCBwLCBjbnQgPSAwOwoKICAgIGNpbj4+bj4+az4+cDsKCiAgICBtZW1zZXQoYSwgMCwgc2l6ZW9mKGEpKTsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIGNpbj4+YVtpXTsKICAgICAgICAKICAgICAgICBpZihhW2ldID09IDEpCiAgICAgICAgICAgIGNudCsrOwoKICAgICAgICBhW2kgKyBuXSA9IGFbaV07CiAgICB9CgogICAgdGVtcFsyKm5dID0gMDsKICAgIGZvcihpbnQgaSA9IDIgKiBuIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgdGVtcFtpXSA9IHRlbXBbaSArIDFdIC0gYVtpICsga10gKyBhW2ldOyAKCiAgICBtYWtldHJlZSgwLCAyICogbiAtIDEsIDAsIHRlbXApOwoKICAgIHN0cmluZyBzOwoKICAgIGNpbj4+czsKCiAgICBpbnQgc2l6ZSA9IHMubGVuZ3RoKCksIHN0YXJ0ID0gbjsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgewogICAgICAgIGlmKHNbaV0gPT0gJyEnKQogICAgICAgIHsKICAgICAgICAgICAgc3RhcnQgPSBzdGFydCAtIDE7CiAgICAgICAgICAgIGlmKHN0YXJ0ID09IDApIHN0YXJ0ID0gbjsKICAgICAgICB9CiAgICAgICAgZWxzZSAKICAgICAgICB7CiAgICAgICAgICAgIGlmKGsgPj0gbikgCiAgICAgICAgICAgICAgICBjb3V0PDxjbnQ8PCJcbiI7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGFucyA9IHF1ZXJ5KDAsIDIgKiBuIC0gMSwgc3RhcnQsIG1pbigyICogbiAtMSwgc3RhcnQgKyBrIC0gMSksIDApOwoKICAgICAgICAgICAgICAgIGNvdXQ8PGFuczw8IlxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0K