//#include <bits/stdc++.h>
#include "bits/stdc++.h"
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> VI;
typedef vector<VI> VVI;//例: VVI dp(10, vector<int>(10, INF);
typedef priority_queue<int, vector<int>, less<int> > QUE_int;
const int INF = 2 * pow(10, 9) + 1;//+1しないとREになるかも(out of rangeになるんかな?? )

vector<int> dx = { -1, 0, 1, 0, -1, -1, 1, 1 };
vector<int> dy = { 0, -1, 0, 1, -1, 1, -1, 1 };

ll max(ll a, ll b) { return (a > b) ? a : b; }
ll min(ll a, ll b) { return (a < b) ? a : b; }

////////////////////////////////////////////////////////////////

// auto mod int
// https://youtu.be/L8grWxBlIZ4?t=9858
// https://youtu.be/ERZuLAxZffQ?t=4807 : optimize
// https://youtu.be/8uowVvQ_-Mo?t=1329 : division
const int mod = pow(10, 9) + 7;
struct mint {
	ll x; // typedef long long ll;
	mint(ll x = 0) :x((x%mod + mod) % mod) {}
	mint operator-() const { return mint(-x); }
	mint& operator+=(const mint a) {
		if ((x += a.x) >= mod) x -= mod;
		return *this;
	}
	mint& operator-=(const mint a) {
		if ((x += mod - a.x) >= mod) x -= mod;
		return *this;
	}
	mint& operator*=(const mint a) {
		(x *= a.x) %= mod;
		return *this;
	}
	mint operator+(const mint a) const {
		mint res(*this);
		return res += a;
	}
	mint operator-(const mint a) const {
		mint res(*this);
		return res -= a;
	}
	mint operator*(const mint a) const {
		mint res(*this);
		return res *= a;
	}
	mint pow(ll t) const {
		if (!t) return 1;
		mint a = pow(t >> 1);
		a *= a;
		if (t & 1) a *= *this;
		return a;
	}

	// for prime mod
	mint inv() const {
		return pow(mod - 2);
	}
	mint& operator/=(const mint a) {
		return (*this) *= a.inv();
	}
	mint operator/(const mint a) const {
		mint res(*this);
		return res /= a;
	}
};
// combination mod prime
// https://www.youtube.com/watch?v=8uowVvQ_-Mo&feature=youtu.be&t=1619
struct combination {
	vector<mint> fact, ifact;
	combination(int n) :fact(n + 1), ifact(n + 1) {
		assert(n < mod);
		fact[0] = 1;
		for (int i = 1; i <= n; ++i) fact[i] = fact[i - 1] * i;
		ifact[n] = fact[n].inv();
		for (int i = n; i >= 1; --i) ifact[i - 1] = ifact[i] * i;
	}
	mint operator()(int n, int k) {
		if (k < 0 || k > n) return 0;
		return fact[n] * ifact[k] * ifact[n - k];
	}
};

template <typename TYPE>
void print_vec(const vector<TYPE>& v){
	for(int i=0; i<v.size(); i++){
		cout << v[i] << " ";
	}
	cout << endl;
}

////////////////////////////////////////////////////////////////




	

int main(void) {
	int N, K, C;
	cin >> N >> K >> C;
	string S;
	cin >> S;

	vector<int> work_day_L(N, -1);
	int cnt = 1; //count
	for(int i=0; i<N; ){
		//if(cnt >= K) break;
		if(S[i] == 'x'){
			i++;
			continue;
		}
		work_day_L[i] = cnt;
		cnt++;
		i += C+1;
	}

	vector<int> work_day_R(N, -1);
	reverse(S.begin(), S.end());
	cnt = 1; //count
	for(int i=0; i<N; ){
		//if(cnt >= K) break;
		if(S[i] == 'x'){
			i++;
			continue;
		}
		work_day_R[i] = cnt;
		cnt++;
		i += C+1;
	}
	// for(int i=0; i<N; i++){
	// 	if(S[i] == 'x') continue;
	// 	work_day_R[i] = work_day_R[i] - cnt + 1;
	// }
	reverse(work_day_R.begin(), work_day_R.end());
	reverse(S.begin(), S.end());
	//cout << "cnt: " << cnt << endl;
	// cout << "work_day_L: "; print_vec(work_day_L);
	// cout << "work_day_L: "; print_vec(work_day_R);

	//働く日を格納する
	vector<int> l_days, r_days;
	for(int i=0; i<N; i++){
		if(work_day_L[i] != -1) l_days.push_back(i);
	}
	for(int i=N-1; i>=0; i--){
		if(work_day_R[i] != -1) r_days.push_back(i);
	}
	// cout << "l_days: "; print_vec(l_days);
	// cout << "r_days: "; print_vec(r_days);


	// -1 の部分を左(右)の値と同じにする
	for(int i=1; i<N; i++){
		if(work_day_L[i] != -1) continue;
		work_day_L[i] = work_day_L[i-1];
	} if(work_day_L[N-1] < K) return 0;//これ満たさないと，そもそも組み合わせが1パターンもない
	for(int i=N-2; i>=0; i--){
		if(work_day_R[i] != -1) continue;
		work_day_R[i] = work_day_R[i+1];
	}



	// cout << " work_day_L : "; print_vec(work_day_L);
	// cout << " work_day_R : "; print_vec(work_day_R);



	//絶対働く日かを0~N-1まで確認
	//i=0
	if(S[0] == 'o'){
		if(work_day_R[1] >= K) ;//continue;
		else cout << 1 << endl;
	}
	//i=1 ~ N-2
	for(int i=1; i<N-1; i++){
		if(S[i] == 'x') continue;
		int l = work_day_L[i-1];
		int r = work_day_R[i+1];

		int can_day = 0;
		if(l != -1) can_day += l;
		if(r != -1) can_day += r;		
		if( l != -1 && r != -1){
			if( -l_days[l-1] + r_days[r-1] <= C){
				can_day--;
				// cout << " l :" << l << " r: " << r << endl;
				// cout << " l_days[l-1]: " << l_days[l-1] << " r_days[r-1]: " << r_days[r-1] << " C: " << C << endl;
			}
		}
	
		if(can_day >= K) continue;
		cout << i+1 << endl; 

	}

	//i=N-1
	if(N>=2 && S[N-1] == 'o'){
		if(work_day_L[N-2] >= K) ;//continue;
		else cout << N << endl;
	}

}




Measured memory_bytes: 4984