/*
 _____ _             _              _           _ 
|_   _| |__   ___   / \   _ __  ___| |__  _   _| |
  | | | '_ \ / _ \ / _ \ | '_ \/ __| '_ \| | | | |
  | | | | | |  __// ___ \| | | \__ \ | | | |_| | |
  |_| |_| |_|\___/_/   \_\_| |_|___/_| |_|\__,_|_|                                                

*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp>
#define ll          long long
#define pb          push_back
#define ppb         pop_back
#define    endl        '\n'
#define mii         map<ll,ll>
#define msi         map<string,ll>
#define mis         map<ll, string>
#define rep(i,a,b)    for(ll i=a;i<b;i++)
#define repr(i,a,b) for(ll i=b-1;i>=a;i--)
#define trav(a, x)     for(auto& a : x)
#define pii         pair<ll,ll>
#define vi          vector<ll>
#define vii         vector<pair<ll, ll>>
#define vs          vector<string>
#define all(a)      (a).begin(),(a).end()
#define F           first
#define S           second
#define sz(x)       (ll)x.size()
#define hell        1000000007
#define lbnd        lower_bound
#define ubnd        upper_bound
#define max(a,b)    (a>b?a:b)
#define min(a,b)    (a<b?a:b)

/*    For Debugging    */
#define DEBUG         cerr<<"\n>>>I'm Here<<<\n"<<endl;
#define display(x) trav(a,x) cout<<a<<" ";cout<<endl;
#define what_is(x)  cerr << #x << " is " << x << endl;

std::mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count());
#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update> 
#define TIME        cerr << "\nTime elapsed: " << setprecision(5) <<1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
#define DECIMAL(n)  cout << fixed ; cout << setprecision(n);
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace __gnu_pbds;
using namespace std;
#define PI 3.141592653589793
#define N  200005
ll n,k,c;
ll dp1[N];
ll dp[N];
string s;

ll fun(ll i)
{
    if(i>n)
        return 0;
    if(dp[i]!=-1)
        return dp[i];
    if(s[i-1]=='o')
    dp[i]=max(fun(i+c+1)+1,fun(i+1));
    if(s[i-1]=='x')
    dp[i]=fun(i+1);
    return dp[i];
}
ll fun1(ll i)
{
    if(i<=0)
        return 0;
    if(dp1[i]!=-1)
        return dp1[i];
    if(s[i-1]=='o')
    dp1[i]=max(fun1(i-c-1)+1,fun1(i-1));
    if(s[i-1]=='x')
    dp1[i]=fun1(i-1);
    // cout<<i<<" "<<dp1[i]<<endl;
    return dp1[i];
}

void solve()
{
    cin>>n>>k>>c;
    cin>>s;
    ll t1,t2;
    rep(i,0,n+1)
    {
        dp[i]=-1;
        dp1[i]=-1;
    }
    vi pref(n+2),suf(n+2);
    pref[0]=0;
    rep(i,1,n+2)
    {
        pref[i]=pref[i-1];
        if(s[i-1]=='o')
            pref[i]=i;
    }
    suf[n+1]=n+1;
    repr(i,0,n+1)
    {
        suf[i]=suf[i+1];
        if(s[i-1]=='o')
            suf[i]=i;
    }
    // fun1(11);
    rep(i,1,n+1)
    {
        if(s[i-1]=='x')
            continue;
        t1=max(fun(max(i+1,pref[i-1]+c+1))+fun1(pref[i-1]),fun(suf[i+1])+fun1(min(i-1,suf[i+1]-c-1)));
        t2=fun(i+c+1)+fun1(i-c-1)+1;
        // cout<<t1<<" "<<t2<<endl;
        if(t1<k && t2>=k)
        {
            cout<<i<<endl;
        }
    }
    // rep(i,1,n+1)
    // {
    //     // cout<<fun(i)<<" "<<fun1(i)<<endl;
    // }
    return;
}
int main()
{
    FAST
    int TESTS=1;
//    cin>>TESTS;
    while(TESTS--)
    {
        solve();
    }
    TIME
    return 0;
}

Measured memory_bytes: 14356