#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;


#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define PSET(x,y) fixed<<setprecision(y)<<x
#define pb push_back
#define pii pair<int,int>
#define pf push_front
#define mp make_pair
#define vi vector<int>
#define vip vector<pair<int,int> >
#define ff first
#define ss second
#define int long long
#define mod 1000000007
#define BIG 998244353
#define s(t) scanf("%lld",&t)
#define p(t) printf("%lld\n",t)
#define mii map<int,int>
#define MSET(table,i) memset(table, i, sizeof(table))
#define endl '\n'
#define tc int t;cin>>t;while(t--)
#define pi  3.1415926358
#define bits(x) __builtin_popcount(x)
#define minimum(a,n) min_element(a,a+n)-a
#define maximum(a,n) max_element(a,a+n)-a
#define pqbig priority_queue<pii>
#define pqsmall priority_queue<int,vector<int >,greater<int > >
#define all(v) v.begin(),v.end()
#define sitr set<int>:: iterator
#define spitr set<pii>:: iterator
#define mitr map<string,int>:: iterator

int toint(const string &s) {stringstream ss; ss << s; int x; ss >> x; return x;}
string tostring ( int number ) {stringstream ss; ss << number; return ss.str();}

typedef tree<pii, null_type, less<pii>, rb_tree_tag,
        tree_order_statistics_node_update>
        new_data_set;

#define trace1(x)                cerr<<#x<<": "<<x<<endl
#define trace2(x, y)             cerr<<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl
#define trace3(x, y, z)          cerr<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<endl
#define trace4(a, b, c, d)       cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<endl
#define trace5(a, b, c, d, e)    cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<endl
#define trace6(a, b, c, d, e, f) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<" | "<<#f<<": "<<f<<endl

const int N=2e5+5;
int aage[N],piche[N];
int max_aage[N],max_piche[N];
bool check_left[N],check_right[N];
int min_konsa[N];

int solve(vip &v,int id)
{
    int ans=-1;
    int low=0,high=(int)v.size()-1;
    while(low<=high)
    {
        int mid=(low+high)/2;
        if(v[mid].ff<=id)
            ans=mid,low=mid+1;
        else
            high=mid-1;
    }
    return ans;
}
    
int32_t main()
{
    fast;
    int n,k,c;cin>>n>>k>>c;
    string s;cin>>s;
    string tmp=s;
    reverse(all(tmp));
    vip v;

    for(int i=0;i<n;i++)
    {
        if(s[i]=='x')
            continue;

        int id_req=i-c-1;
        int val=solve(v,id_req);
        if(val>=0 and val<(int)v.size())
            piche[i]=1+v[val].ss;
        else
            piche[i]=1;

        int maxi=piche[i];
        if((int)v.size())
            maxi=max(maxi,v.back().ss);
        v.pb(mp(i,maxi));
    }

    v.clear();
    for(int i=0;i<tmp.size();i++)
    {
        if(tmp[i]=='x')
            continue;

        int id_req=i-c-1;
        int val=solve(v,id_req);
        if(val>=0 and val<(int)v.size())
            aage[n-i-1]=1+v[val].ss;
        else
            aage[n-i-1]=1;

        int maxi=aage[n-i-1];
        if((int)v.size())
            maxi=max(maxi,v.back().ss);
        v.pb(mp(i,maxi));
    }

    max_piche[0]=piche[0];
    for(int i=1;i<n;i++)
        max_piche[i]=max(max_piche[i-1],piche[i]);
    max_aage[n-1]=aage[n-1];
    for(int i=n-2;i>=0;i--)
        max_aage[i]=max(max_aage[i+1],aage[i]);

    MSET(min_konsa,-1);


    for(int i=0;i+c+1<n;i++)
    {
        int req=k-piche[i];
        int min_id=i+c+1;

        int ans=-1;
        int low=min_id,high=n-1;
        while(low<=high)
        {
            int mid=(low+high)/2;
            if(max_aage[mid]>=req)
                ans=mid,low=mid+1;
            else
                high=mid-1;
        }
        min_konsa[i]=ans;
    }

    for(int i=1;i<n;i++)
        min_konsa[i]=max(min_konsa[i],min_konsa[i-1]);

    set<int> chk;
    
    for(int i=0;i<n;i++)
    {
        if(i>0 and max_piche[i-1]>=k)
        {
            chk.insert(i);
            continue;
        }
        if(i+1<n and max_aage[i+1]>=k)
        {
            chk.insert(i);
            continue;
        }

        if(i>0 and min_konsa[i-1]>i)
            chk.insert(i);
    }   
    for(int i=0;i<n;i++)
    {
        if(s[i]=='x')
            continue;
        if(chk.find(i)==chk.end())
            cout<<i+1<<endl;
    }
}

Measured memory_bytes: 21636