Takahashi has decided to work on K days of his choice from the N days starting with tomorrow.
You are given an integer C and a string S. Takahashi will choose his workdays as follows:
 - After working for a day, he will refrain from working on the subsequent C days.
 - If the i-th character of S is x, he will not work on Day i, where Day 1 is tomorrow, Day 2 is the day after tomorrow, and so on.
Find all days on which Takahashi is bound to work.

-----Constraints-----
 - 1 \leq N \leq 2 \times 10^5
 - 1 \leq K \leq N
 - 0 \leq C \leq N
 - The length of S is N.
 - Each character of S is o or x.
 - Takahashi can choose his workdays so that the conditions in Problem Statement are satisfied.

-----Input-----
Input is given from Standard Input in the following format:
N K C
S

-----Output-----
Print all days on which Takahashi is bound to work in ascending order, one per line.

-----Sample Input-----
11 3 2
ooxxxoxxxoo

-----Sample Output-----
6

Takahashi is going to work on 3 days out of the 11 days. After working for a day, he will refrain from working on the subsequent 2 days.
There are four possible choices for his workdays: Day 1,6,10, Day 1,6,11, Day 2,6,10, and Day 2,6,11.
Thus, he is bound to work on Day 6.

Difficulty: interview

Starter code:

Solutions:
N,K,C = map(int,input().split())
S = input()
L = []
R = []
i = 0
while i < N:
    if S[i] == "o":
        L.append(i)
        i += C
    i += 1
j = N-1
while j >= 0:
    if S[j] == "o":
        R.append(j)
        j -= C
    j -= 1   
for i in range(K):
    if L[i] == R[K-1-i]:
        print(L[i]+1)

n, k, c = map(int,input().split())
s = input()

l = []
r = []
i=0
while len(l)<k:
    if s[i]=="o":
        l.append(i)
        i += c+1
    else:
        i +=1

i=0
while len(r)<k:
    if s[n-1-i] == "o":
        r.append(n-1-i)
        i += c+1
    else:
        i += 1

for i in range(k):
    if l[i] == r[-i-1]:
        print(l[i]+1)

n,k,c=map(int,input().split())
s=list(input())
i=0
l=[0]*k
r=[0]*k
j=0
while i<n and l[-1]==0:
  if s[i]=='o':
    l[j]=i+1
    i+=c+1
    j+=1
  else:
    i+=1
i=0
j=k-1
while i<n and r[0]==0:
  if s[-i-1]=='o':
    r[j]=n-i
    i+=c+1
    j-=1
  else:
    i+=1
for i in range(k):
  if r[i]==l[i]:
    print(r[i])

def main():
    N, K, C = map(int, input().split())
    S = input()

    L = [-1] * K  # 0-ind

    i = 0
    cur = 0
    while i < N:
        if S[i] == 'o':
            L[cur] = i
            cur += 1
            if cur == K: break
            i += C
        i += 1

    R = [-1] * K  # 0-ind

    i = N - 1
    cur = K - 1
    while i >= 0:
        if S[i] == 'o':
            R[cur] = i
            cur -= 1
            if cur == -1: break
            i -= C
        i -= 1

    ans = (l + 1 for l, r in zip(L, R) if l == r)  # 1-ind
    print(*ans, sep='\n')


def __starting_point():
    main()

__starting_point()

n, k, c = map(int,input().split())
s = list(input())

i, cnt = 0, 0
l = []
while cnt < k:
    if s[i] == 'o':
        l.append(i+1)
        cnt += 1
        i += c
    i += 1

i, cnt = n-1, 0
r = []
while cnt < k:
    if s[i] == 'o':
        r.append(i+1)
        cnt += 1
        i -= c
    i -= 1

r.sort()
for i in range(len(r)):
    if l[i] == r[i]:
        print(r[i])

n,k,c=map(int,input().split()) ; c+=1
s=input()
A=[i+1 for i in range(n) if s[i]=="o"] #働ける日付
L=[1 for i in range(k)] #働く日数[l] はL[l]以降
R=[n for i in range(k)] #L[l]以前

import bisect
for i in range(1,k):
  L[i]= A[bisect.bisect_left(A,L[i-1]+c)]
  R[-i-1]= A[bisect.bisect_right(A,R[-i]-c)-1]

  
for i in range(k):
  if L[i]==R[i]: 
    print(L[i])

N, K, C = list(map(int, input().split()))
S = input()

F = {}
i = 0
c = 1
while i < N and c <= K:
    if S[i] == 'x':
        i += 1
        continue
    F[c] = i + 1
    i += C + 1
    c += 1

L = {}
i = N - 1
c = K
while i >= 0 and c >= 1:
    if S[i] == 'x':
        i -= 1
        continue
    L[c] = i + 1
    i -= C + 1
    c -= 1

for i in range(1, K + 1):
    if F[i] == L[i]:
        print((F[i]))


N, K, C = map(int, input().split())
S = input()[::-1]
Top = []
Bottom = []
yasumi = 0
ans = []
k = K
for i in range(N):
    if (yasumi == 0) and (S[i] == "o") and (k > 0):
        Bottom.append(N-i)
        yasumi += C
        k -= 1
    elif yasumi > 0:
        yasumi -= 1

S_ = S[::-1]
Bottom.sort()
j = -1
yasumi = 0
for i in range(N):
    if (yasumi == 0) and (S_[i] == "o") and (K > 0):
        j += 1
        yasumi += C
        K -= 1
        if j >= len(Bottom):
            break
        elif Bottom[j] == i+1:
            ans.append(i+1)
    elif yasumi > 0:
        yasumi -= 1

for i in ans:
    print(i)

def main():
    N, K, C = list(map(int, input().split()))
    S = input()

    i = 0
    c = 0
    p = [-1] * N
    while c < K:
        if S[i] == 'o':
            p[i] = c
            c += 1
            i += C
        i += 1

    i = N - 1
    c = K - 1
    q = [-1] * N
    while c >= 0:
        if S[i] == 'o':
            q[i] = c
            c -= 1
            i -= C
        i -= 1

    for i in range(N):
        if ~p[i] and p[i] == q[i]:
            print((i + 1))


def __starting_point():
    main()

__starting_point()

num=list(map(int, input().split()))
string=input()
countl=0
countr=num[1]
i=0
j=num[0]
L=[]
R=[]
#rR=[]
while countl!=num[1]:
  if string[i]=='o':
    L.append(i+1)
    countl=countl+1
    i=i+num[2]+1
  else:
    i=i+1
  if i>=num[0]:
    break
while countr!=0:
  if string[j-1]=='o':
    R.append(j)
    countr=countr-1
    j=j-num[2]-1
  else:
    j=j-1
  if j<0:
    break
#print(R)
R.reverse()
#print(L)
#print(rR)
for k in range(num[1]):
  if L[k]==R[k]:
    print((L[k]))



def resolve():
    N, K, C = list(map(int, input().split()))
    S = input()

    left = [0]*N
    i = 0
    cnt = 1
    while i < N:
        if S[i] == "o":
            left[i] = cnt
            i += C
            cnt += 1
        i += 1

    right = [0]*N
    i = 0
    cnt = K
    T = S[::-1]
    while i < N:
        if T[i] == "o":
            right[i] = cnt
            i += C
            cnt -= 1
        i += 1
    right = right[::-1]

    for i in range(N):
        if left[i] == 0:
            continue
        if left[i] == right[i]:
            print((i+1))

def __starting_point():
    resolve()

__starting_point()

# coding: utf-8
import sys

sr = lambda: sys.stdin.readline().rstrip()
ir = lambda: int(sr())
lr = lambda: list(map(int, sr().split()))

N, K, C = lr()
S = sr()
# 左からと右からでそれぞれ貪欲、重なったところが必須
left = []; right = []

def work(S):
    ret = []
    cur = 0
    count = 0
    while count < K:
        if S[cur] == 'o':
            count += 1
            ret.append(cur)
            cur += C + 1
        else:
            cur += 1
    return ret

left = work(S)
right = work(S[::-1])
right = [N-1-x for x in right]
right.reverse()
answer = []
for l, r in zip(left, right):
    if l == r:
        answer.append(str(l+1))
print(('\n'.join(answer)))


N,K,C = map(int, input().split())
S = input()
dp0 = [0]*K
dp1 = [0]*K
step = C
cnt = 0
for i in range(N):
  if step>=C and S[i]=='o':
    dp0[cnt] = i
    cnt += 1
    if cnt==K:
      break
    step = 0
  else:
    step += 1
step = C
cnt = K-1
for i in range(N-1,-1,-1):
  if step>=C and S[i]=='o':
    dp1[cnt] = i
    cnt -= 1
    if cnt==-1:
      break
    step = 0
  else:
    step += 1
ans = 0
for i,(a,b) in enumerate(zip(dp0,dp1)):
  if a==b:
    print(a+1)

N, K, C = list(map(int, input().split()))
S = input()

l = [-1] * N
r = [-1] * N

idx = 1
i = 0
C += 1

while i < N:
    if S[i] == 'o':
        l[i] = idx
        idx += 1
        i += C
    else:
        i += 1

idx = 1
i = N-1
while 0 <= i:
    if S[i] == 'o':
        r[i] = idx
        idx += 1
        i -= C
    else:
        i -= 1

if idx-1 <= K:
    for i in range(N):
        if l[i] != -1 and r[i] != -1: print(i+1)

n, k, c = map(int, input().split())
s = list(input())

count = 0

l, r = [], []

for i in range(n):
    m = i + c * count
    if m >= n:
        break
    if s[m] == 'o':
        count += 1
        if count > k:
            break
        l.append(m)

count = 0

for i in range(n - 1, -1, -1):
    m = i - c * count
    if m < 0:
        break
    if s[m] == 'o':
        count += 1
        if count > k:
            break
        r.append(m)

l.sort()
r.sort()

for i in range(k):
    if l[i] == r[i]:
        print(l[i] + 1)

#!/usr/bin/env python3
# coding: utf-8

def debug(arg):
    if __debug__:
        pass
    else:
        import sys
        print(arg, file=sys.stderr)
        
def main():
    N, K, C = map(int, input().split())
    S = dict(enumerate(str(input()), 1))

    sr = list(k for k, v in S.items() if v == 'o')
    sl = list(reversed(sr.copy()))

    debug(sr)
    debug(sl)

    l = [sl.pop()]
    r = [sr.pop()]
    
    for x in range(1, K):
        while True:
            ll = sl.pop()
            if ll > l[x - 1] + C:
                l.append(ll)
                break
        while True:
            rr = sr.pop()
            if rr < r[x - 1] - C:
                r.append(rr)
                break

    debug(r)
    debug(l)

    # a = sorted(set(l) & set(r))

    # debug(a)
    # for aa in a:
    #     print(aa)
    
    for ll, rr in zip(l, sorted(r)):
        if ll == rr:
            print(ll)

def __starting_point():
    main()
__starting_point()

n, k, c = map(int, input().split())
s = input()
l = [0 for i in range(k)]
r = [0 for i in range(k)]
i, j = 0, 0
while i < n and (not l[-1]):
    if s[i] == "o":
        l[j] = i + 1
        i += c + 1
        j += 1
    else:
        i += 1
i, j = 0, k - 1
while i < n and (not r[0]):
    if s[n - i - 1] == "o":
        r[j] = n - i
        i += c + 1
        j -= 1
    else:
        i += 1
for i in range(k):
    if l[i] == r[i]:
        print(l[i])

N, K, C = map(int, input().split())
S = input()

l = [0]*K
i = 0
for j in range(K):
    while S[i] == "x":
        i += 1
    l[j] = i
    i += C+1

r = [0]*K
i = N-1
for j in range(K-1, -1, -1):
    while S[i] == "x":
        i -= 1
    r[j] = i
    i -= C+1
# print(l, r)
[print(l_i+1) for l_i, r_i in zip(l, r) if l_i == r_i]



import itertools
from collections import deque,defaultdict,Counter
from itertools import accumulate
import bisect
from heapq import heappop,heappush,heapify
import math
from copy import deepcopy
import queue
import numpy as np
# sympy as syp(素因数分解とか)
Mod = 1000000007
def sieve_of_eratosthenes(n):
    if not isinstance(n,int):
        raise TypeError("n is not int")
    if n<2:
        raise ValueError("n is not effective")
    prime = [1]*(n+1)
    for i in range(2,int(math.sqrt(n))+1):
        if prime[i] == 1:
            for j in range(2*i,n+1):
                if j%i == 0:
                    prime[j] = 0
    res = []
    for i in range(2,n+1):
        if prime[i] == 1:
            res.append(i)
    return res

 
class UnionFind:
    def __init__(self,n):
        self.parent = [i for i in range(n+1)]
        self.rank = [0 for i in range(n+1)]
    
    def findroot(self,x):
        if x == self.parent[x]:
            return x
        else:
            y = self.parent[x]
            y = self.findroot(self.parent[x])
            return y
    
    def union(self,x,y):
        px = self.findroot(x)
        py = self.findroot(y)
        if px < py:
            self.parent[y] = px
        else:
            self.parent[px] = py
 
    def same_group_or_no(self,x,y):
        return self.findroot(x) == self.findroot(y)

def main():  #startline-------------------------------------------
    n, k, c = map(int, input().split())
    def sub(s):
        n = len(s)
        cur = 0
        last = -(c + 1)
        res = [0] * (n + 1)
        for i in range(n):
            if (i - last > c and s[i] == "o"):
                cur += 1
                last = i
            res[i + 1] = cur
        return res
    
    s = input()
    left = sub(s)
    t = s
    t = t[::-1]
    right = sub(t)
    for i in range(n):
        if s[i] == "x": continue
        if left[i] + right[n - i - 1] < k:
            print(i+1)

def __starting_point():
    main() #endline===============================================
__starting_point()

n,k,c=list(map(int,input().split()))
s=str(input())
l=[]
r=[]
cnt=0
for i in range(k):
    if s[cnt]=="o":
        l.append(cnt+1)
        cnt+=c+1
    else:
        while s[cnt]!="o":
            cnt+=1
        l.append(cnt+1)
        cnt+=c+1
cnt=1
for i in range(k):
    if s[-cnt]=="o":
        r.append(n-cnt+1)
        cnt+=c+1
    else:
        while s[-cnt]!="o":
            cnt+=1
        r.append(n-cnt+1)
        cnt+=c+1
r=r[::-1]
for i in range(k):
    if l[i]==r[i]:
        print((l[i]))



def main():
    import sys
    input = sys.stdin.readline
    sys.setrecursionlimit(10**7)
    from collections import Counter, deque
    from itertools import combinations, permutations, accumulate, groupby, product
    from bisect import bisect_left,bisect_right
    from heapq import heapify, heappop, heappush
    import math
    #from math import gcd

    #inf = 10**17
    #mod = 10**9 + 7

    n,k,c = map(int, input().split())
    s = input().rstrip()
    left = [0]*n
    day = 0
    temp = 0
    while day < n:
        if s[day] == 'o':
            temp += 1
            left[day] = temp
            for i in range(c):
                if day+i+1 < n:
                    left[day+i+1] = temp
            day += c
        else:
            left[day] = temp
        day += 1

    right = [0]*n
    day = n-1
    temp = 0
    while 0 <= day:
        if s[day] == 'o':
            temp += 1
            right[day] = temp
            for i in range(c):
                if day-i-1 >= 0:
                    right[day-i-1] = temp
            day -= c
        else:
            right[day] = temp
        day -= 1

    res = []
    for i in range(n):
        if s[i] == 'o':
            if i-c-1 < 0:
                pre = 0
            else:
                pre = left[i-c-1]
            if i+c+1 >= n:
                pos = 0
            else:
                pos = right[i+c+1]
            if pre + pos == k-1:
                res.append(i+1)
    for i in range(len(res)):
        if i-1>=0:
            l = res[i-1]
        else:
            l = -1000000
        if i+1<len(res):
            r = res[i+1]
        else:
            r = 10000000
        if res[i]-l>c and r-res[i] > c:
            print(res[i])

def __starting_point():
    main()
__starting_point()

n,k,c = list(map(int,input().split()))
s = input()
fro = []
bac = []

for i in range(n):
    if s[i] == "o" and (len(fro) == 0 or fro[-1]+c < i):
        fro.append(i)
    if s[n-i-1] == "o" and (len(bac) == 0 or bac[-1]-c > n-i-1):
        bac.append(n-i-1)

for i in range(k):
    if fro[i] == bac[k-i-1]:
        print((fro[i]+1))


N,K,C = map(int, input().split())
S = input()
w = []
for i in range(len(S)):
   if S[i]=="o":
      w.append(i)
# print(w)
# early date
early = []
tmpwd = -1
for i in range(len(w)):
   if len(early) >= K:
      continue
   if tmpwd<0:
      tmpwd = w[i]
   elif w[i]>tmpwd+C:
      tmpwd = w[i]
   else:
      continue
   early.append(w[i])
# print(early)

# later date
late = []
tmpwd = -1
for i in reversed(range(len(w))):
   if len(late)>=K:
      continue      
   if tmpwd < 0:
      tmpwd = w[i]
   elif w[i] < tmpwd-C:
      tmpwd = w[i]
   else:
      continue
   late.append(w[i])

wd = set(early) & set(late)
early.sort()
late.sort()
# print(early,late)
for i in range(K):
   if early[i]==late[i]:
      print(early[i]+1)

N, K, C = list(map(int, input().split()))
S = input()

s = []

count = 0
for i in range(N):
    if len(s) == K:
        break
    if count == 0:
        if S[i] == 'x':
            continue
        else:
            count = C
            s.append(i+1)
    else:
        count -= 1
s2 = []
count = 0
for i in range(N-1, -1, -1):
    if len(s2) == K:
        break
    if count == 0:
        if S[i] == 'x':
            continue
        else:
            s2.append(i+1)
            count = C
    else:
        count -= 1

for a, b in zip(s, s2[::-1]):
    if a == b:
        print(a)


n,k,c=list(map(int,input().split()))
s=input()

available=[]
for i in range(n):
    if s[i]=="o":
        available.append(i)

#左側から〇を数える
left=[0]*n
rest=0
cnt=0

for i in range(n):
    if s[i]=="o" and i>=rest:
        cnt+=1
        left[i]=cnt
        rest=i+c+1
    else:
        left[i]=cnt

#右側から〇を数える
right=[0]*n
rest=n-1
cnt=0

for i in range(n-1,-1,-1):
    if s[i]=="o" and i<=rest:
        cnt+=1
        right[i]=cnt
        rest=i-c-1
    else:
        right[i]=cnt

#-1日目、n+1日目がエラーにならないように0を足す        
for i in ([left,right]):
    i.insert(0,0)
    i.append(0)

ans=[]

for i in range(1,n+1):
    a=left[i-1]+right[i+1]
    if a<k:
        ans.append(i)
    
for j in ans:
    print(j)


n,k,c = map(int,input().split())
s = input()
forth = set()
reverse = set()
cur = 0
tired = 0
for i in range(n):
    if s[i] == "o":
        if tired == 0:
            cur += 1
            tired = c
            forth.add(i+1)
        else:
            if tired > 0:
                tired -= 1
    else:
        if tired > 0:
            tired -= 1
if cur > k:
    return
s = s[::-1]
cur = 0
tired = 0
for i in range(n):
    if s[i] == "o":
        if tired == 0:
            cur += 1
            tired = c
            reverse.add(n-i)
        else:
            if tired > 0:
                tired -= 1
    else:
        if tired > 0:
            tired -= 1
ans = forth & reverse
ans = list(ans)
ans.sort()
for i in ans:
    print(i)

N, K, C = [int(input_) for input_ in input().split(" ")]
    
tick_cross = input()
    
def find_earliest_work_days(K, C, tick_cross):
    """
    Find the list of the earliest day in all possible days for the n-th 
    work day.
    
    Parameters:
    K (int): The number of work days.
    C (int): Minimum interval between the previous work day and the 
             next work day.
    tick_cross (str): The character string of days he can go to work.
             
    Returns:
    List[int]: The list of the earliest day in all possible days for 
               the n-th work day.
    """
    
    N = len(tick_cross)
        
    day = 0
    earliest_work_days = []
    number_of_work_days = len(earliest_work_days)
    while (day < N) and (number_of_work_days < K):
        if tick_cross[day] == "o":
            earliest_work_days.append(day+1)
            number_of_work_days = len(earliest_work_days)
            day += C + 1
        else:
            day += 1
            
    return earliest_work_days
    
def find_latest_work_days(K, C, tick_cross): 
    """
    Find the list of the latest day in all possible days for the n-th 
    work day.
    
    Parameters
    K (int): The number of work days.
    C (int): Minimum interval between the previous work day and the 
             next work day.
    tick_cross (str): The character string of days he can go to work.
             
    Returns:
    List[int]: The list of the latest day in all possible days for 
               the n-th work day.
    """
    
    N = len(tick_cross)
        
    day = N - 1
    latest_work_days = []
    number_of_work_days = len(latest_work_days)
    while (day >= 0) and (number_of_work_days < K):
        if tick_cross[day] == "o":
            latest_work_days.append(day+1)
            number_of_work_days = len(latest_work_days)
            day -= (C + 1)
        else:
            day -= 1
            
    return sorted(latest_work_days)
                
earliest_work_days = find_earliest_work_days(K, C, tick_cross)
latest_work_days = find_latest_work_days(K, C, tick_cross)
for earliest, latest in zip(earliest_work_days, latest_work_days):
    if earliest == latest:
        print(earliest)

def main():
  N, K, C=list(map(int, input().split()))
  S = input()[::-1]
  
  R=[0]*K
  n, k=0, 0
  while k < K:
    if S[n]=='o':
      R[k]=N-n
      k+=1
      n += C
    n+=1
  R=R[::-1]
  
  S=S[::-1]
  n, k=0, 0
  while k < K:
    if S[n]=='o':
      if n+1 == R[k]:
        print((n+1))
      k+=1
      n += C
    n+=1
  #print(L)
  
def __starting_point():
  main()

__starting_point()

n, k, c = [int(i) for i in input().split()]
s = input()

work1 = [0] * k
work2 = [0] * k
cnt = 0
day = 0

while cnt < k:
	if s[day] == 'o':
		work1[cnt] = day
		cnt	+= 1
		day += (c+1)
	else:
		day += 1


cnt = k-1
day = n-1

while cnt >= 0:
	if s[day] == 'o':
		work2[cnt] = day
		cnt	-= 1 
		day -= (c + 1)
	else:
		day -= 1


for i in range(k):
	if work1[i] == work2[i]:
		print((work1[i]+1))




def resolve():
    def sub(s):
        cur = 0
        last = -(C + 1)
        res = [0] * (N + 1)
        for i in range(N):
            if i - last > C and s[i] == "o":
                cur += 1
                last = i
            res[i + 1] = cur
        return res

    N, K, C = list(map(int, input().split()))
    S = input()

    left = sub(S)
    T = S[::-1]
    right = sub(T)
    for i in range(N):
        if S[i] == "x":
            continue
        if left[i] + right[N - i - 1] < K:
            print((i + 1))


def __starting_point():
    resolve()

__starting_point()

n,k,c=map(int,input().split())
s=input()
l=[]
r=[]
i=0
j=0
while len(l)<k and i<n:   
    if s[i]=='o':
      l.append(i+1)
      i+=c+1
    else: i+=1

while len(r)<k and j<n:   
    if s[-j-1]=='o':
      r.append(n-j)
      j+=c+1
    else: j+=1
for n in range(k):
  if l[n]==r[-n-1]:
    print(l[n])

INF=float('inf')
n,k,c=list(map(int,input().split()))
s=input()

L=[-1 for _ in range(n)]
cl=c+1
wl=1
for i in range(n):
  if wl>k:
    continue
  if s[i]=='x':
    cl+=1
  else:
    if cl>c:
      L[i]=wl
      wl+=1
      cl=1
    else:
      cl+=1

R=[-1 for _ in range(n)]
cr=c+1
wr=k
for j in range(n-1,-1,-1):
  if wr<1:
    continue
  if s[j]=='x':
    cr+=1
  else:
    if cr>c:
      R[j]=wr
      wr-=1
      cr=1
    else:
      cr+=1

for i in range(n):
  if L[i]==-1:
    continue
  if R[i]==-1:
    continue
  if L[i]==R[i]:
    print((i+1))
    


#!/usr/bin/env python3

# N:全日数 K:働く日数 C:働いた日からその後働かない日数
N, K, C = map(int, input().split())
S = input()

# num回目に働く日はl[num-1]日目以降
l = []
num = 0
i = 0
while num < K:
    if S[i] == "o":
        l.append(i)
        num += 1
        i += C + 1
    else:
        i += 1

# num回目に働く日はl[num-1]日目以前
r = []
num = 0
i = N - 1
while num < K:
    if S[i] == "o":
        r.append(i)
        num += 1
        i -= C + 1
    else:
        i -= 1
r.reverse()

for i in range(K):
    if l[i] == r[i]:
        print(l[i] + 1)

line1 = input().split()
n = int(line1[0])
k = int(line1[1])
c = int(line1[2])
s = list(input())
l = [s.index("o") + 1]
r = [len(s) - s[::-1].index("o")]
for i in range(1, k):
  j = l[i - 1]
  m = r[i - 1]
  while j - l[i - 1] <= c or s[j - 1] != "o":
    j += 1
  while r[i - 1] - m <= c or s[m - 1] != "o":
    m -= 1
  r.append(m)
  l.append(j)
r = r[::-1]
for i in range(len(r)):
  if r[i] == l[i]:
    print(r[i])

N, K, C = map(int, input().split())
S = input()
L, R = [-1] * K, [-1] * K
k = 0; temp = -C
for i, s in enumerate(S, 1):
    if s == 'o' and i > temp + C: L[k] = i; k += 1; temp = i
    if k == K: break
k = K - 1; temp = N + C + 1
for i, s in reversed(list(enumerate(S, 1))):
    if s == 'o' and i < temp - C: R[k] = i; k -= 1; temp = i
    if k == -1: break
ans = []
for l, r in zip(L, R):
    if l == r: ans.append(l)
for a in ans: print(a)

3
# -*- coding: utf-8 -*-
n, k, c = map(int, input().split())
S = [1 if a == "o" else 0 for a in input()]
count = 0
X = [0] * n
Y = [0] * n
i = 0
while i < n:
    if S[i]:
        count += 1
        X[i] = 1
        i += c + 1
    else:
        i += 1
if count > k:
    return
i = n - 1
while i >= 0:
    if S[i]:
        Y[i] = 1
        i -= c + 1
    else:
        i -= 1
for i in range(0, n):
    if X[i] and Y[i]:
        print(i + 1)

# 解説を参考に作成


def solve():
    N, K, C = list(map(int, input().split()))
    S = input()

    left = []
    rest = 0
    work = 0
    for i in range(N):
        if S[i] == 'o' and rest == 0:
            left.append(i)
            rest = C + 1
            work += 1
        if rest > 0:
            rest -= 1
        if work == K:
            break

    right = []
    rest = 0
    work = 0
    for i in reversed(list(range(N))):
        if S[i] == 'o' and rest == 0:
            right.append(i)
            rest = C + 1
            work += 1
        if rest > 0:
            rest -= 1
        if work == K:
            break
    right = list(reversed(right))

    # print(left)
    # print(right)
    for i in range(len(left)):
        if left[i] == right[i]:
            print((left[i] + 1))


def __starting_point():
    solve()

__starting_point()

N, K, C = list(map(int, input().split()))
S = list(input())

# 左詰めの働くリスト
l_list = [-1 for i in range(N)]
i = 0
cnt = 0
while(i < N and cnt < K):
	if(S[i] == "o"):
		l_list[i] = cnt
		cnt += 1
		i += C
	i += 1

# 右詰めの働くリスト
r_list = [-1 for i in range(N)]
i = N - 1
cnt = 0
while(i >= 0 and cnt < K):
	if(S[i] == "o"):
		r_list[i] = K-1-cnt
		cnt += 1
		i -= C
	i -= 1

# 両方のリストで一致するマス(日)を出力
for i in range(N):
	if(l_list[i] == -1 or r_list[i] == -1):
		continue
	if(l_list[i] == r_list[i]):
		print((i+1))


n,k,c=list(map(int,input().split()))
s=input()
INF=float("inf")
left=[0]*(n+1)
right=[0]*(n+1)

mleft=0
last=-c-1
for i in range(n):
    if s[i]=="o" and i-last>c:
        mleft+=1
        last=i
        left[i+1]=mleft

mright=0
last=-c-1
t=s[::-1]
for i in range(n):
    if t[i]=="o" and i-last>c:
        mright+=1
        last=i
        right[i+1]=mright

for i in range(n):
    left[i+1]=max(left[i+1],left[i])
    right[i + 1] = max(right[i + 1], right[i])

left.remove(left[0])
right.remove(right[0])
right=right[::-1]
left.append(0)
right.append(0)

ans=[]
for i in range(1,n+1):
    if s[i-1]=="o":
        if left[i-2]+right[i]<k:
            ans.append(i)


for i in range(len(ans)):
    print((ans[i]))




N, K, C = list(map(int, input().split()))
S = input()
A = []
cnt = 0
for i, s in enumerate(S, 1):
    if cnt > 0:
        cnt -= 1
    elif s == "o":
        cnt = C
        A.append(i)
if len(A) > K:
    return
B = []
cnt = 0
for i, s in zip(list(range(N, 0, -1)), S[::-1]):
    if cnt > 0:
        cnt -= 1
    elif s == "o":
        cnt = C
        B.append(i)
assert len(B) == K
B.reverse()
Ans = []
for a, b in zip(A, B):
    if a == b:
        Ans.append(a)
print(("\n".join(map(str, Ans))))


import bisect
n,k,c = map(int,input().split())
s = input()

lst = []
for i in range(n):
    if s[i]=='o':
        lst.append(i+1)

x,y = [],[]
for i in range(len(lst)):
    if i==0:
        x.append(lst[i])
    else:
        if lst[i]-x[-1]>c:
            x.append(lst[i])
    if len(x)==k:
        break

for i in range(len(lst))[::-1]:
    if i==len(lst)-1:
        y.append(lst[i])
    else:
        if y[-1]-lst[i]>c:
            y.append(lst[i])
    if len(y)==k:
        break

x.sort()
y.sort()

ans = []
for i in range(k):
    if x[i]==y[i]:
        ans.append(x[i])
for a in ans:
    print(a)

n, k, c = map(int, input().split())
s = input()
left = [-1 for _ in range(k)]
right = [-1 for _ in range(k)]

bef = -10 ** 10
cnt = 0
for i, ss in enumerate(s):
    if ss == "o" and i - bef > c:
        if cnt == k:
            return
        left[cnt] = i
        bef = i
        cnt += 1

cnt = 0
bef = -10 ** 10
for i, ss in enumerate(s[::-1]):
    if ss == "o" and i - bef > c:
        if cnt == k:
            return
        right[k - 1 - cnt] = n - 1 - i
        bef = i
        cnt += 1


for ll, rr in zip(left, right):
    if ll == rr:
        print(ll + 1)

import sys
readline = sys.stdin.readline

# もっとも早い日に貪欲に働いたパターン
# もっとも遅い日に貪欲に働いたパターン
# 上記でX回目の仕事が同じ日であればその日は必ず働く必要がある

N,K,C = map(int,readline().split())
S = readline().rstrip()

fast = [0] * K
ind = 0
cnt = 0
while cnt < K: # K回働くまで
  if S[ind] == "o":
    fast[cnt] = ind
    cnt += 1
    ind += (C + 1)
  else:
    ind += 1

late = [0] * K
ind = len(S) - 1
cnt = K - 1
while 0 <= cnt:
  if S[ind] == "o":
    late[cnt] = ind
    cnt -= 1
    ind -= (C + 1)
  else:
    ind -= 1
    
ans = []
for i in range(K):
  if fast[i] == late[i]:
    ans += [fast[i] + 1]
    
for a in ans:
  print(a)

def main() -> None:
    n, k, c = list(map(int, input().split()))
    s = input()

    if k<s.count('o') and c==0:
        print('')
        return

    count = c
    day_work, day_work_reverse = [], []
    for i, day in enumerate(s):
        count += 1
        if day == 'o' and c < count:
            day_work.append(i+1)
            count = 0
    count = c
    for i, day in enumerate(s[::-1]):
        count += 1
        if day == 'o' and c < count:
            day_work_reverse.append(n-i)
            count = 0
    day_must = set(day_work[:k]) & set(day_work_reverse[:k])
    for day in sorted(list(day_must)):
        print(day)
    return


def __starting_point():
    main()

__starting_point()

from collections import deque


def read_int():
    return int(input().strip())


def read_ints():
    return list(map(int, input().strip().split(' ')))


def solve():
    N, K, C = read_ints()
    S = input().strip()
    earliest = []
    i = 0
    while len(earliest) < K:
        if S[i] == 'o':
            earliest.append(i)
            i += C+1
        else:
            i += 1
    latest = []
    i = N-1
    while len(latest) < K:
        if S[i] == 'o':
            latest.append(i)
            i -= C+1
        else:
            i -= 1
    latest.reverse()
    for i, j in zip(earliest, latest):
        if i == j:
            print((i+1))


def __starting_point():
    solve()

__starting_point()

N, K, C = list(map(int, input().split()))
S = input()

L = [0]*K
R = [0]*K
lpiv = 0
rpiv = N-1
for i in range(K):
    while S[lpiv] == 'x':
        lpiv += 1
    while S[rpiv] == 'x':
        rpiv -= 1
    L[i] = lpiv
    R[i] = rpiv
    lpiv += C+1
    rpiv -= C+1

ans = 0
for i in range(K):
    if L[i]==R[K-i-1]:
        print((L[i]+1))


def main():

    N, K, C = [int(i) for i in input().split()]
    S = input().rstrip()

    if all(s == "x" for s in S):
        return
    
    left = [0] * N
    day = 0
    work_cnt = 1
    while day < N:
        if S[day] == "o":
            left[day] = work_cnt
            work_cnt += 1
            day += C
        day += 1
    
    right = [0] * N
    day = N - 1
    work_cnt = K
    while 0 <= day:
        if S[day] == "o":
            right[day] = work_cnt
            work_cnt -= 1
            day -= C
        day -= 1
    
    for i in range(N):
        if left[i] == right[i] and left[i] != 0:
            print((i + 1))

main()


N, K, C = list(map(int,input().split()))
s = list(str(input()))

L = []  # i+1日目に働くのはL[i]日目以降
R = []  # i+1日目に働くのはL[i]日目以前

for i in range(N):
    if len(L) >= K:
        break
    if s[i] == 'o' and (L == [] or (i + 1) - L[-1] > C):
        # 出勤可能('o') 且 (Lが空又はi日目時点の最終出勤からc日経過)
        # ならばLにi+1を追加
        L.append(i + 1)

for i in range(N - 1, -1, -1):
    if len(R) >= K:
        break
    if s[i] == 'o' and (R == [] or R[-1] - (i + 1) > C):
        R.append(i + 1)

R.reverse()
ans = []

for i in range(K):
    if L[i] == R[i]:
        print(L[i])

def main():
    N, K, C = list(map(int, input().split(' ')))
    S = input()
    R, L = [0 for _ in range(K)], [0 for _ in range(K)]
    # calc first dates
    index, cnt = 0, 0
    while cnt < K and index <= N - 1:
        if S[index] == 'o':
            R[cnt] = index
            index += C + 1
            cnt += 1
        else:
            index += 1
    # calc last dates
    S = S[::-1]
    index, cnt = 0, 0
    while cnt < K and index <= N - 1:
        if S[index] == 'o':
            L[K - 1 - cnt] = N - 1 - index
            index += C + 1
            cnt += 1
        else:
            index += 1
    ans = [R[k] + 1 for k in range(K) if R[k] == L[k]]
    if len(ans) == 0:
        print('')
    else:
        for a in ans:
            print(a)


def __starting_point():
    main()
__starting_point()

def assign(s, n, k, c):
    res = []
    i = 0
    while k > 0 and i < n:
        if s[i] == 'o':
            res.append(i)
            k -= 1
            i += c
        i += 1
    return res


n, k, c = list(map(int, input().split()))
s = input()
a = assign(s, n, k, c)
b = assign(s[::-1], n, k, c)[::-1]
c = [n-x-1 for x in b]

for x, y in zip(a, c):
    if x == y:
        print((x + 1))


n,k,c=list(map(int,input().split()))
s=input()

i=0
counter=0
fslist=[]

while counter < k:
	if s[i] == "o":
		fslist.append(i)
		i += c+1
		counter += 1
	else:
		i += 1

i=-1
counter=0
felist=[]

while counter < k:
	if s[i] == "o":
		felist.append(i+n)
		i -= c+1
		counter += 1
	else:
		i -= 1

felist.reverse()

for i in range(k):
	if fslist[i] == felist[i]:
		print((fslist[i]+1))



def main():
    n, k, c = map(int, input().split())
    s = input().rstrip()
    frnt = [None]*n
    back = [None]*n
    if s[0] == "o":
        frnt[0] = [1, 0]
    else:
        frnt[0] = [0, -1*n - 100]
    for i in range(1, n):
        if s[i] == "o" and i - frnt[i-1][1] - 1 >= c:
            frnt[i] = [frnt[i-1][0]+1, i]
        else:
            frnt[i] = [frnt[i-1][0], frnt[i-1][1]]
    if s[-1] == "o":
        back[-1] = [1, n-1]
    else:
        back[-1] = [0, 2*n + 100]
    for i in reversed(range(n-1)):
        if s[i] == "o" and back[i+1][1] - i - 1 >= c:
            back[i] = [back[i+1][0]+1, i]
        else:
            back[i] = [back[i+1][0], back[i+1][1]]
    for i in range(n):
        if s[i] == "x":
            continue
        a = frnt[i][0] + back[i][0]
        if i == frnt[i][1]:
            a -= 1
        if i == back[i][1]:
            a -= 1
        if i != frnt[i][1] and i != back[i][1]:
            if back[i][1] - frnt[i][1] - 1 < c:
                a -= 1
        if a == k-1:
            print(i+1)

def __starting_point():
    main()
__starting_point()

data = input().split(" ")
N, K, C = int(data[0]), int(data[1]), int(data[2])
S = input()

point = 0
work_start = [0] * (K + 1)
for i in range(1, K + 1):
  point = S.find("o", point, N)
  work_start[i] = point + 1
  point += (C + 1)

point = N
work_end = [0] * (K + 1)
for i in range(K, 0, -1):
  point = S.rfind("o", 0, point)
  work_end[i] = point + 1
  point -= C

for i in range(1, K + 1):
  if work_start[i] == work_end[i]:
    print(work_start[i])


n, k, c = list(map(int, input().split()))
s = input()
l = [0] * k
r = [0] * k
p = 0
# for i in range(n):
i = 0
while i < n:
    if s[i] == "o":
        l[p] = i
        p += 1
        if (p >= k):
            break
        i += c
    i += 1
p = k-1
# for i in range(n - 1, -1, -1):
i = n - 1
while i >= 0:
    if s[i] == "o":
        r[p] = i
        p -= 1
        if (p < 0):
            break
        i -= c
    i -= 1
#print(l, r)
for i in range(k):
    if l[i] == r[i]:
        print((l[i]+1))


# n : 全日数　k：働く日数　c：働いた日からその後働かない日数
n, k, c = map(int, input().split())
s = input()

## 前から貪欲的に働く日を求める l
l = []
i = 0
num = 0
while num < k:
    if s[i] == 'o':
        l.append(i)
        num += 1
        i += c + 1
    else:
        i += 1

## 後ろから貪欲的に働く日を求める r
r = []
num = 0
i = n - 1
while num < k:
    if s[i] == 'o':
        r.append(i)
        num += 1
        i -= c + 1
    else:
        i -= 1
r.reverse()

for i in range(k):
    if l[i] == r[i]:
        print(l[i] + 1)

n, k, c = map(int, input().split())
s = input()

left = []
i = 0
while len(left) < k:
  if s[i] == 'o':
    left.append(i)
    i += c + 1
  else:
    i += 1

right = []
i = n - 1
while len(right) < k:
  if s[i] == 'o':
    right.append(i)
    i -= c + 1
  else:
    i -= 1

right = right[::-1]

for i in range(k):
  if left[i] == right[i]:
    print(left[i] + 1)

n, k, c = list(map(int, input().split()))
s = input()

workL = [0] * (n + 1)
workR = [0] * (n + 1)

cnt = 0
left = 0

while left < n:
    if s[left] == 'o':
        workL[left + 1] += 1
        cnt += 1
        left += c
    left += 1

cnt = 0
right = n - 1
while right >= 0:
    if s[right] == 'o':
        workR[right] += 1
        cnt += 1
        right -= c
    right -= 1

for i in range(n - 1):
    workL[i + 1] += workL[i]
for i in range(n - 1, 0, -1):
    workR[i - 1] += workR[i]


print(("\n".join(
    map(str, [i + 1 for i in range(n) if workL[i] + workR[i + 1] < k]))))


N,K,C = map(int,input().split())
S = list(input())

A = [0]*N
B = [0]*N

i = 0
a = 1
while i < N:
    if S[i] == 'o':
        A[i] = a
        a += 1
        i += C+1
    else:
        i += 1
j = N-1
b = K
while j >= 0:
    if S[j] == 'o':
        B[j] = b
        b -= 1
        j -= C+1
    else:
        j -= 1

for i in range(N):
    if A[i] == B[i] and A[i] != 0:
        print(i+1)

#!/usr/bin/env python3
import sys


def solve(N: int, K: int, C: int, S: str):
    l = [None] * N
    r = [None] * N

    pre = -float('inf')
    k = -1
    for cur in range(N):
        if cur - pre > C and S[cur] == 'o':
            k += 1
            pre = cur
            l[k] = cur

    pre = float('inf')
    k = K
    for cur in range(N-1, -1, -1):
        if pre - cur > C and S[cur] == 'o':
            k -= 1
            pre = cur
            r[k] = cur

    return [ll+1 for ll, rr in zip(l[:K], r[:K]) if ll == rr]
    


# Generated by 1.1.6 https://github.com/kyuridenamida/atcoder-tools  (tips: You use the default template now. You can remove this line by using your custom template)
def main():
    def iterate_tokens():
        for line in sys.stdin:
            for word in line.split():
                yield word
    tokens = iterate_tokens()
    N = int(next(tokens))  # type: int
    K = int(next(tokens))  # type: int
    C = int(next(tokens))  # type: int
    S = next(tokens)  # type: str
    print(*solve(N, K, C, S), sep='\n')

def __starting_point():
    main()

__starting_point()

import sys
readline = sys.stdin.readline

# もっとも早い日に貪欲に働いたパターン
# もっとも遅い日に貪欲に働いたパターン
# 上記でX回目の仕事が同じ日であればその日は必ず働く必要がある

N,K,C = map(int,readline().split())
S = readline().rstrip()

fast = [0] * K
ind = 0
cnt = 0
while cnt < K: # K回働くまで
  if S[ind] == "o":
    fast[cnt] = ind
    cnt += 1
    ind += (C + 1)
  else:
    ind += 1

late = [0] * K
ind = len(S) - 1
cnt = 0
while cnt < K:
  if S[ind] == "o":
    late[cnt] = ind
    cnt += 1
    ind -= (C + 1)
  else:
    ind -= 1
    
late = late[::-1]

ans = []
for i in range(K):
  if fast[i] == late[i]:
    ans += [fast[i] + 1]
    
for a in ans:
  print(a)


def main():
  _n, k, c = list(map(int, input().split()))
  s = input()

  l = []
  r = []

  for i, char in enumerate(s):
    if len(l) >= k:
      break

    if char == 'o' and (not len(l) or i - l[-1] > c):
      l.append(i)

  for i, char in reversed(tuple(enumerate(s))):
    if len(r) >= k:
      break

    if char == 'o' and (not len(r) or r[-1] - i > c):
      r.append(i)

  r.reverse()

  for i in range(k):
    if l[i] == r[i]:
      print((l[i] + 1))


main()


n,k,c = map(int,input().split())
s = input()
cnt = 0
e = 0
l = []
for i,si in enumerate(s):
  if e == k:
    break
  if cnt > 0:
    cnt -= 1
    continue
  if si == 'o':
    l.append(i+1)
    cnt = c
    e += 1
  
r = []
cnt = 0
d = 0
for i,si in enumerate(s[::-1]):
  if d == k:
    break
  if cnt > 0:
    cnt -= 1
    continue
  if si == 'o':
    r.append(n-i)
    cnt = c
    d += 1
    
for i in range(k):
  if l[i] == r[k-1-i]:
    print(l[i])

n, k, c = list(map(int, input().split()))
s = input()


cnt0 = [-10**10] * len(s)
cnt1 = [-10**10] * len(s)
rest0 = c
rest1 = c
ct0 = 1
ct1 = 1
for i in range(len(s)):
    a = s[i]
    b = s[len(s) - 1 - i]
    if (c <= rest0) & (a == 'o'):
        cnt0[i] = ct0
        ct0 += 1
        rest0 = 0
    else:
        rest0 += 1
    if (c <= rest1) & (b == 'o'):
        cnt1[len(s) - 1 - i] = ct1
        ct1 += 1
        rest1 = 0
    else:
        rest1 += 1
for i in range(len(s)):
    if (cnt0[i] + cnt1[i] == k+1):
        print((i+1))


N, K, C = list(map(int, input().split()))
S = input()

work_day_min = []
work_day_max = []

for i in range(N):
    if S[i] == 'o':
        if i > 0 and len(work_day_min) > 0:
            if i - work_day_min[-1] <= C:
                continue
        work_day_min.append(i)
    if len(work_day_min) == K:
        break

for i in range(N):
    if S[N - i - 1] == 'o':
        if i > 0 and len(work_day_max) > 0:
            if work_day_max[-1] - (N - i - 1) <= C:
                continue
        work_day_max.append(N - i - 1)
    if len(work_day_max) == K:
        break

for i in range(K):
    if work_day_min[i] == work_day_max[K-i-1]:
        print(work_day_min[i]+1)

# E - Yutori
N,K,C = map(int,input().split())
S = input()
L = [0]*K
R = [0]*K

i = 0
for j in range(K):
    while S[i]!='o':
        i += 1
    L[j] = i
    i += C+1

i = N-1
for j in range(K-1,-1,-1):
    while S[i]!='o':
        i -= 1
    R[j] = i
    i -= C+1
    
for j in range(K):
    if L[j]==R[j]:
        print(L[j]+1)

N, K, C = list(map(int, input().split()))
S = input()

L = [0] * K
i = 0
x = 0
while i<K and x<N:
    if S[x] == 'o':
        L[i] = x
        i += 1
        x += C+1
    else:
        x += 1

R = [0] * K
i = K-1
x = N-1
while i>=0 and x>=0:
    if S[x] == 'o':
        R[i] = x
        i -= 1
        x -= C+1
    else:
        x -= 1

ans = []
for i in range(K):
    if L[i] == R[i]:
        ans.append(L[i])
for a in ans:
    print((a+1))


N, K, C = [int(_) for _ in input().split()]
S = input()
cand = [i + 1 for i, s in enumerate(S) if s == 'o']
F = [[cand[0]]]
for c in cand[1:]:
    if c - F[-1][0] > C:
        F += [[]]
    F[-1] += [c]
if len(F) > K:
    return
B = [[cand[-1]]]
for c in cand[-2::-1]:
    if B[-1][0] - c > C:
        B[-1] = B[-1][::-1]
        B += [[]]
    B[-1] += [c]
B = B[::-1]
B[0] = B[0][::-1]
ans = []
for f, b in zip(F, B):
    if len(f) == 1 or f[1] not in b:
        ans += [f[0]]
print(('\n'.join(map(str, ans))))


def main():
  N, K, C=list(map(int, input().split()))
  S = input()

  R=[0]*K
  n, k=N-1, 0
  while k < K:
    if S[n]=='o':
      R[k]=n+1
      k+=1
      n -= C
    n-=1
  R=R[::-1]
  
  n, k=0, 0
  while k < K:
    if S[n]=='o':
      if n+1 == R[k]:
        print((n+1))
      k+=1
      n += C
    n+=1
  #print(L)
  

  
def __starting_point():
  main()

__starting_point()

N,K,C = map(int,input().split())
S = list(str(input()))

L = []###i+1回目に働くのはL[i]日目以降
R = []###i+1回目に働くのはL[i]日目以前

for i in range(N):
    if len(L) >= K:
        break
    if S[i] =="o" and (L==[] or (i+1) - L[-1] > C):
        L.append(i+1)

for i in range(N-1,-1,-1):
    if len(R) >= K:
        break
    if S[i] == "o" and (R==[] or R[-1] - (i+1) > C):
        R.append(i+1)

R.reverse()###Rは逆順にappendしたのでreverse
ans = []

for i in range(K):
    if L[i] == R[i]:
        ans.append(L[i])


###
#print(L)
#print(R)
###
for i in range(len(ans)):
    print(ans[i])

n , k , c = map(int,input().split())

s = input()

L = []
R = []

i = 0
j = n-1



while i<n and len(L)<k :
    if s[i] == "o" :
        L.append(i)
        i += c
    i += 1

while j>-1 and len(R)<k :
    if s[j] == "o" :
        R.append(j)
        j -= c
    j -= 1

R.reverse()

for x in range(k):
    if R[x] == L[x]:
        print(R[x]+1)

from collections import deque
import copy

N, K, C = list(map(int,input().split()))
S = input().split()[0]
TW = 0
q = []

for s in range(len(S)):
    if S[s] == 'o':
        q.append(s+1)

WD = []
LD = 0

for s in q:
    if len(WD) > K:
        break
    if LD == 0:
        WD.append(s)
        LD = s
    elif s-LD <= C:
        continue
    else:
        WD.append(s)
        LD = s


WDR = []
LD = 0
q.reverse()

for s in q:
    if len(WDR) > K:
        break
    if LD == 0:
        WDR.append(s)
        LD = s
    elif LD - s <= C:
        continue
    else:
        WDR.append(s)
        LD = s


for d in range(len(WD)):
    if WD[d] == WDR[len(WD)-d-1]:
        print((WD[d]))



n,k,c=list(map(int,input().split()))
s=input()
l=[0]*n
pre=n+c+1
cnt=k
for i in range(n-1,-1,-1):
    if s[i]=="o" and -(i)+pre>c and cnt>0:
        pre=i
        l[i]=cnt
        cnt-=1
pre=-c-5
cnt=0
for i in range(n):
    if s[i]=="o" and i-pre>c and cnt<k:
        pre=i;cnt+=1
        if l[i]==cnt:print((i+1))


def main():
    import sys
    input = sys.stdin.readline
    sys.setrecursionlimit(10**7)
    from collections import Counter, deque
    from itertools import combinations, permutations, accumulate, groupby, product
    from bisect import bisect_left,bisect_right
    from heapq import heapify, heappop, heappush
    import math
    #from math import gcd

    #inf = 10**17
    #mod = 10**9 + 7

    n,k,c = map(int, input().split())
    s = input().rstrip()
    left = [0]*n
    day = 0
    temp = 1
    while day < n:
        if s[day] == 'o':
            left[day] = temp
            temp += 1
            day += c
        day += 1

    right = [0]*n
    day = n-1
    temp = k
    while 0 <= day:
        if s[day] == 'o':
            right[day] = temp
            temp -= 1
            day -= c
        day -= 1

    for i in range(n):
        if left[i] == right[i] and left[i] != 0:
            print(i+1)

def __starting_point():
    main()
__starting_point()

n,k,c=list(map(int,input().split()))
s=input()
left=[k+1]*n
right=[k+1]*n
l,r=1,1
i=0
while i<n:
    if s[i]=='o':
        left[i]=l
        l+=1
        i+=c
    i+=1
i=1
while i<n+1:
    if s[-i]=='o':
        right[-i]=r
        r+=1
        i+=c
    i+=1
for i in range(n):
    if left[i]+right[i]==k+1:
        print((i+1))


def do_solve(n, k, c, s):
    dp = [0 for i in range(n)]
    for i in range(n):
        dp[i] = 1 if s[i] == 'o' else 0
        if i - c - 1 >= 0:
            dp[i] = max(dp[i], dp[i - c - 1] + 1 if s[i] == 'o' else 0)
        if i - 1 >= 0:
            dp[i] = max(dp[i], dp[i - 1])
    return dp

def solve(n, k, c, s):
    dp1 = do_solve(n, k, c, s)
    dp2 = do_solve(n, k, c, s[::-1])[::-1]

    # print dp1
    # print dp2

    res = []
    for i in range(n):
        if s[i] == 'x':
            continue
        l = dp1[i - 1] if i - 1 >= 0 else 0
        r = dp2[i + 1] if i + 1 < n else 0

        # print i, l, r

        if l + r == k - 1:
            res.append(i + 1)
    # print res
    return res

assert solve(16, 4, 3, 'ooxxoxoxxxoxoxxo') == [11, 16]
assert solve(11, 3, 2, 'ooxxxoxxxoo') == [6]
assert solve(5, 1, 0, 'ooooo') == []
assert solve(5, 2, 3, 'ooxoo') == [1, 5]

(n, k, c) = list(map(int, input().split()))
s = input().strip()

for num in solve(n, k, c, s):
    print(num)



def main():
    n, k, c = (int(i) for i in input().split())
    s = input()

    if k > sum(1 for c in s if c == 'o'):
        return

    latest = [None] * k
    earliest = [None] * k
    earliest[0] = s.index('o')
    for i in range(1, k):
        try:
            earliest[i] = s.index('o', earliest[i-1] + c + 1)
        except ValueError:
            return
    
    latest[-1] = s.rindex('o')
    for i in reversed(list(range(k-1))):
        try:
            latest[i] = s.rindex('o', 0, latest[i+1] - c)
        except ValueError:
            return

    bound_days = [earliest[i] + 1 for i in range(k) if earliest[i] ==
            latest[i]]

    for e, l in zip(earliest, latest):
        if e == l:
            print((e + 1))
main()


N, K, C = list(map(int, input().split()))
S = input().strip("\n")

L = [-1] * N
R = [10 ** 10] * N

l = 1
r = K
li = 0
ri = N-1
while li < N:
    if S[li] == "o":
        L[li] = l
        l += 1
        li += C + 1
    else: li += 1

while ri >= 0:
    if S[ri] == "o":
        R[ri] = r
        r -= 1
        ri -= C + 1
    else: ri -= 1


for i in range(N):
    if L[i] == R[i]: print((i + 1))



n, k, c = map(int, input().split())
s = input()

# num 回目に働く日は l[num-1] 日目以降
l = []
num = 0 # num = len(l)
i = 0
while num < k:
    if s[i] == 'o':
        l.append(i)
        num += 1
        i += c + 1
    else:
        i += 1

# num 回目に働く日は l[num-1] 日目以前
r = []
num = 0 # num = len(r)
i = n - 1
while num < k:
    if s[i] == 'o':
        r.append(i)
        num += 1
        i -= c + 1
    else:
        i -= 1
r.reverse()

for i in range(k):
    if l[i] == r[i]:
        print(l[i] + 1)

n,k,c = map(int,input().split())
s = [i == "o" for i in list(input())]
i = 0
cnt = 0
l = [0]*n
r = [0]*n
while i < n:
    if s[i]:
        cnt += 1
        for j in range(i,c+i+1):
            if j < n:
                l[j] = cnt
        i += c+1
    else:
        l[i] = cnt
        i += 1
i = n-1
cnt = 0
while i >= 0:
    if s[i]:
        cnt += 1
        for j in range(i,i-1-c,-1):
            if j >= 0:
                r[j] = cnt
        i -= c+1
    else:
        r[i] = cnt
        i -= 1
#print(l,r)
r.append(0)
if r[1] < k:
    print(1)
for i in range(1,n-1):
    if not s[i]:
        continue
    if l[i-1] + r[i+1] < k:
        print(i+1)
if l[n-2] < k:
    print(n)

N, K, C = map(int, input().split())
S = input()

def get_positions():
    res = []
    i = 0
    while i < N and len(res) < K:
        if S[i] == "o":
            res.append(i)
            i = i + C + 1
        else:
            i += 1
    return res

l = get_positions()
S = S[::-1]
r = get_positions()
for i in range(K):
    r[i] = N - 1 - r[i]
S = S[::-1]

lastl = [-1] * (N + 1)
for i in range(K):
    lastl[l[i] + 1] = i
for i in range(N):
    if lastl[i + 1] == -1:
        lastl[i + 1] = lastl[i]

lastr = [-1] * (N + 1)
for i in range(K):
    lastr[r[i]] = i
for i in range(N-1, -1, -1):
    if lastr[i] == -1:
        lastr[i] = lastr[i + 1]

for i in range(N):
    if S[i] == "x":
        continue
    li = lastl[i]
    ri = lastr[i + 1]
    cnt = 0
    if li != -1:
        cnt += (li + 1)
    if ri != -1:
        cnt += (ri + 1)
    if li != -1 and ri != -1 and r[ri] - l[li] <= C:
        cnt -= 1

    if cnt >= K:
        continue
    print(i + 1)

N,K,C=map(int,input().split())
S=input()
day=[]
for i in range(len(S)):
  if S[i]=='o':
    day.append(i+1)
E=[day[0]]    
cur=day[0]
for i in range(1,len(day)):
  if day[i]>=cur+C+1:
    cur=day[i]
    E.append(cur)
F=[day[len(day)-1]]
cur=day[len(day)-1]
for i in range(len(day)-1,-1,-1):
  if day[i]<=cur-C-1:
    cur=day[i]
    F.append(cur)
if len(E)>K:
  while len(E)>K:
    E.pop()
if len(F)>K:  
  while len(F)>K:
    F.pop()
F.reverse()

for i in range(K):
  if E[i]==F[i]:
    print(E[i])

#!/usr/bin/env python3
# coding: utf-8

# def debug(arg):
#     if __debug__:
#         pass
#     else:
#         import sys
#         print(arg, file=sys.stderr)
        
def main():
    N, K, C = map(int, input().split())
    S = dict(enumerate(str(input()), 1))

    sr = list(k for k, v in S.items() if v == 'o')
    sl = list(reversed(sr.copy()))

    l = [sl.pop()]
    r = [sr.pop()]
    
    for x in range(1, K):
        while True:
            ll = sl.pop()
            if ll > l[x - 1] + C:
                l.append(ll)
                break
        while True:
            rr = sr.pop()
            if rr < r[x - 1] - C:
                r.append(rr)
                break

    for ll, rr in zip(l, reversed(r)):
        if ll == rr:
            print(ll)

def __starting_point():
    main()
__starting_point()

import sys
# input = sys.stdin.readline
sys.setrecursionlimit(10 ** 9)
MOD = 10 ** 9 + 7

N, K, C = map(int, input().split())
S = list(input())

mae = [-1] * N
i = 0
count = 0
while i < N and count < K:
    if S[i] == 'o':
        mae[i] = count
        count += 1
        i += C + 1
    else:
        i += 1

ushiro = [-1] * N
i = N - 1
count = 0
while i >= 0 and count < K:
    if S[i] == 'o':
        ushiro[i] = K - count - 1
        count += 1
        i -= (C + 1)
    else:
        i -= 1

for i in range(N):
    if mae[i] == ushiro[i] and mae[i] != -1:
        print (i + 1)

N,K,C=map(int,input().split())
S=input()
i=0
d1=[-1]*N
for k in range(K):
    while S[i]=='x' and i<N:
        i+=1
    if i==N:break
    d1[i]=k
    i+=C+1
i=0
d2=[-1]*N
for k in range(K-1,-1,-1):
    while S[N-1-i]=='x' and i<N:
        i+=1
    if i==N:break
    d2[N-1-i]=k
    i+=C+1
print(*[i+1 for i in range(N) if d1[i]==d2[i]>=0],sep='\n')

import sys, bisect, math, itertools, string, queue, copy
import numpy as np
import scipy
from collections import Counter,defaultdict,deque
from itertools import permutations, combinations
from heapq import heappop, heappush
from fractions import gcd
input = sys.stdin.readline
sys.setrecursionlimit(10**8)
mod = 10**9+7
def inp(): return int(input())
def inpm(): return map(int,input().split())
def inpl(): return list(map(int, input().split()))
def inpls(): return list(input().split())
def inplm(n): return list(int(input()) for _ in range(n))
def inplL(n): return [list(input()) for _ in range(n)]
def inplT(n): return [tuple(input()) for _ in range(n)]
def inpll(n): return [list(map(int, input().split())) for _ in range(n)]
def inplls(n): return sorted([list(map(int, input().split())) for _ in range(n)])

n,k,c = inpm()
s = input()

saisoku = [0] * n
saioso = [0] * n

i = 0
while i < n:
    if s[i] == "x":
        i += 1
        continue
    saisoku[i] = 1
    i += c + 1

if saisoku.count(1) > k:
    return

i = n-1
while i >= 0:
    if s[i] == "x":
        i -= 1
        continue
    saioso[i] = 1
    i -= c + 1

for i in range(n):
    if saisoku[i] == 1 and saioso[i] == 1:
        print(i + 1)

n,k,c=list(map(int,input().split()))
s=input()
l,r=[],[]
i=0
while i<n:
    if s[i]=="o":
        l.append(i)
        i+=c+1
    else:
        i+=1
i=n-1
while i>-1:
    if s[i]=="o":
        r.append(i)
        i-=c+1
    else:
        i-=1
l=l[:k]
r=r[:k]
r=r[::-1]
for i in range(k):
    if l[i]==r[i]:
        print((l[i]+1))
#print(l)
#print(r)


INF=10**18
N,K,C=map(int,input().split())
S=input()
left=[0]*N
right=[0]*N
l=-INF
for i in range(N):
    if S[i]=='o':
        if l==-INF:
            left[i]=1
            l=i+C
        elif l<i:
            left[i]=max(left[i],left[i-C-1]+1)
            l=i+C
        else:
            left[i]=left[i-1]
    else:
        left[i]=left[i-1]
r=INF
for i in reversed(range(N)):
    if S[i]=='o':
        if r==INF:
            right[i]=1
            r=i
        elif i<r-C:
            right[i]=max(right[i],right[i+C+1]+1)
            r=i
        else:
            right[i]=right[(i+1)%N]
    else:
        right[i]=right[(i+1)%N]

for i in range(N):
    lsum=left[i-1] if i-1>=0 else 0
    rsum=right[i+1] if i+1<N else 0
    if lsum+rsum<K:
        print(i+1)

N, K, C = map(int, input().split())
S = list(input())
S_work = []
s = []
f = []
i = 0
while len(s) < K:
  if S[i] == "o":
    s.append(i)
    i += C + 1
  elif S[i] == "x":
    i += 1
  elif i == len(S):
    break
i = 1
while len(f) < K:
  if S[N - i] == "o":
    f.append(N - i)
    i += C + 1
  elif S[N - i] == "x":
    i += 1
  elif i == len(S):
    break
f.sort()
for i in range(K):
  if s[i] == f[i]:
    print(s[i] + 1)

def main():
    n, k, c = list(map(int,input().split()))
    s = input()
    schedule = [w == "o" for w in s]
    left = []
    l_day = 0
    right = []
    r_day = n - 1
    while len(left) < k:
        if schedule[l_day]:
            left.append(l_day)
            l_day += c
        l_day += 1

    while len(right) < k:
        if schedule[r_day]:
            right.append(r_day)
            r_day -= c
        r_day -= 1

    right.reverse()


    for i in range(k):
        if left[i] == right[i]:
            print((left[i] + 1))



def __starting_point():
    main()

__starting_point()

n,k,c=map(int,input().split())
s=input()
l=list();r=list()
nex=0
for i in range(n):
	if i<nex:
		continue
	if s[i]=="o":
		nex=i+c+1
		l.append(i)
		if len(l)==k:
			break
nex=-1
for i in range(n):
	if i<nex:
		continue
	if s[-i-1]=="o":
		nex=i+c+1
		r.append(n-i-1)
		if len(r)==k:
			break
r=r[::-1]
for i in range(k):
	if l[i]==r[i]:
		print(l[i]+1)

#
import sys
import math
import numpy as np
import itertools
# いくつか入力
n, k, c = (int(i) for i in input().split())  

# 文字列を一文字ずつのリストに代入 test は['t', 'e', 's', 't']
m = list(input())

l=[-1]*n
r=[-1]*n

a=0
b=c
for i in range(n):
    if b>=c and m[i]=='o':
        b=0
        l[a]=i
        a += 1
    else:
        b += 1
    if a == k:
        break
a=k-1
b=c
for i in range(n-1,-1,-1):
    if b>=c and m[i]=='o':
        b=0
        r[a]=i
        a -= 1
    else:
        b += 1
    if a == k:
        break



answer=0
for i in range(n):
    if l[i] == r[i] and l[i]>=0:
        print((l[i]+1))






N,K,C = list(map(int,input().split()))
S = input()

L = []
R = []

i = 0
while i < N:
    if S[i] == "o":
        L.append(i)
        i += C
    i += 1

j = N-1
while j >= 0:
    if S[j] == "o":
        R.append(j)
        j -= C
    j -= 1   

for i in range(K):
    if L[i] == R[K-1-i]:
        print((L[i]+1))


def main():
    import sys
    def input(): return sys.stdin.readline().rstrip()
    n, k, c = list(map(int, input().split()))
    s = [True if i == 'o' else False for i in input()]
    L = [0]*k
    R = [0]*k
    i = n-1
    now = k-1
    while 0 <= now:
        if s[i]:
            R[now] = i
            i -= c
            now -= 1
        i -= 1
    i = 0
    now = 0
    while now < k:
        if s[i]:
            L[now] = i
            if L[now] == R[now]:
                print((i+1))
            i += c
            now += 1
        i += 1

        



def __starting_point():
    main()

__starting_point()

import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,copy,functools
import time,random

sys.setrecursionlimit(10**7)
inf = 10**20
eps = 1.0 / 10**10
mod = 10**9+7
mod2 = 998244353
dd = [(-1,0),(0,1),(1,0),(0,-1)]
ddn = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]

def LI(): return list(map(int, sys.stdin.readline().split()))
def LLI(): return [list(map(int, l.split())) for l in sys.stdin.readlines()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def LF(): return [float(x) for x in sys.stdin.readline().split()]
def LS(): return sys.stdin.readline().split()
def I(): return int(sys.stdin.readline())
def F(): return float(sys.stdin.readline())
def S(): return input()
def pf(s): return print(s, flush=True)
def pe(s): return print(str(s), file=sys.stderr)
def JA(a, sep): return sep.join(map(str, a))
def JAA(a, s, t): return s.join(t.join(map(str, b)) for b in a)


def main():
    n,k,c = LI()
    s = S()

    l = set()
    i = 0
    while i < n:
        if s[i] == 'x':
            i += 1
        else:
            l.add(i+1)
            i += c + 1

    if len(l) > k:
        return ""

    r = set()
    i = n - 1
    while i >= 0:
        if s[i] == 'x':
            i -= 1
        else:
            r.add(i+1)
            i -= c + 1

    return JA(sorted(l & r), "\n")

print(main())





N, K, C = list(map(int, input().split()))
S = input()
length = len(S)

INF = float('inf')
Ls = [-INF]
n = 0
for i, c in enumerate(S):
    if c == 'o' and i - Ls[-1] > C:
        Ls.append(i)
        n += 1
        if n >= K: break

Rs = [INF]
n = 0
for i, c in enumerate(reversed(S)):
    if c == 'o' and Rs[-1] - (length-1-i) > C:
        Rs.append(length-1-i)
        n += 1
        if n >= K: break
Rs.reverse()

for l, r in zip(Ls[1:], Rs[:-1]):
    if l == r:
        print((l+1))