import sys

sys.setrecursionlimit(10 ** 6)





def dfs(n, rest):

    global C, N

    rst = 0

    if maxR[n] > 0:

        rst = maxR[n]

    elif rest >= C and S[n] == 'o':

        rst += 1

        if n + (C + 1) < N:

            rst += dfs(n + C + 1, C)

    else:

        if n + 1 < N:

            rst += dfs(n + 1, rest + 1)

    maxR[n] = rst

    return rst





def dfs2(n, rest):

    global C, N

    rst = 0

    if maxL[n] > 0:

        rst = maxL[n]

    elif rest >= C and S[n] == 'o':

        rst += 1

        if n - (C + 1) >= 0:

            rst += dfs2(n - (C + 1), C)

    else:

        if n - 1 >= 0:

            rst += dfs2(n - 1, rest + 1)

    maxL[n] = rst

    return rst





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

S = input()

maxR = [-1] * N

for i in range(N):

    if maxR[i] == -1:

        maxR[i] = dfs(i, C)



# if maxR[-1] == -1:

#     maxR[-1] = 0

# for i in range(N - 2, -1, -1):

#     if maxR[i] == -1:

#         maxR[i] = maxR[i + 1]



maxL = [-1] * N

for i in range(N - 1, -1, -1):

    if maxL[i] == -1:

        maxL[i] = dfs2(i, C)



# if maxL[0] == -1:

#     maxL[0] = 0

# for i in range(1, N):

#     if maxL[i] == -1:

#         maxL[i] = maxL[i - 1]



ans = []

for i in range(N):

    r = maxR[i + 1] if i + 1 < N else 0

    l = maxL[i - 1] if i - 1 >= 0 else 0

    if r + l < K:

        ans.append(i + 1)



print(*ans, sep='\n')

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

S = input()



L = [0] * K

k = 0

i = 0

rest = C

while k < K:

    if rest >= C and S[i] == 'o':

        L[k] = i

        k += 1

        rest = 0

    else:

        rest += 1

    i += 1



R = [0] * K

k = K

i = N - 1

rest = C

while k > 0:

    if rest >= C and S[i] == 'o':

        R[k - 1] = i

        k -= 1

        rest = 0

    else:

        rest += 1

    i -= 1



ans = []

for k in range(K):

    if L[k] == R[k]:

        ans.append(L[k] + 1)

print(*ans, sep='\n')

import sys

sys.setrecursionlimit(10**6)


def dfs(n, rest):
    global C, N
    rst = 0
    if maxR[n] > 0:
        rst = maxR[n]
    elif rest >= C and S[n] == "o":
        rst += 1
        if n + (C + 1) < N:
            rst += dfs(n + C + 1, C)
    else:
        if n + 1 < N:
            rst += dfs(n + 1, rest + 1)
    maxR[n] = rst
    return rst


def dfs2(n, rest):
    global C, N
    rst = 0
    if maxL[n] > 0:
        rst = maxL[n]
    elif rest >= C and S[n] == "o":
        rst += 1
        if n - (C + 1) >= 0:
            rst += dfs2(n - (C + 1), C)
    else:
        if n - 1 >= 0:
            rst += dfs2(n - 1, rest + 1)
    maxL[n] = rst
    return rst


N, K, C = map(int, input().split())
S = input()
maxR = [-1] * N
for i in range(N):
    if maxR[i] == -1:
        maxR[i] = dfs(i, C)
# if maxR[-1] == -1:
#     maxR[-1] = 0
# for i in range(N - 2, -1, -1):
#     if maxR[i] == -1:
#         maxR[i] = maxR[i + 1]
maxL = [-1] * N
for i in range(N - 1, -1, -1):
    if maxL[i] == -1:
        maxL[i] = dfs2(i, C)
# if maxL[0] == -1:
#     maxL[0] = 0
# for i in range(1, N):
#     if maxL[i] == -1:
#         maxL[i] = maxL[i - 1]
ans = []
for i in range(N):
    r = maxR[i + 1] if i + 1 < N else 0
    l = maxL[i - 1] if i - 1 >= 0 else 0
    if r + l < K:
        ans.append(i + 1)
print(*ans, sep="\n")

N, K, C = map(int, input().split())
S = input()
L = [0] * K
k = 0
i = 0
rest = C
while k < K:
    if rest >= C and S[i] == "o":
        L[k] = i
        k += 1
        rest = 0
    else:
        rest += 1
    i += 1
R = [0] * K
k = K
i = N - 1
rest = C
while k > 0:
    if rest >= C and S[i] == "o":
        R[k - 1] = i
        k -= 1
        rest = 0
    else:
        rest += 1
    i -= 1
ans = []
for k in range(K):
    if L[k] == R[k]:
        ans.append(L[k] + 1)
print(*ans, sep="\n")

-import sys - -sys.setrecursionlimit(10**6) - - -def dfs(n, rest): -    global C, N -    rst = 0 -    if maxR[n] > 0: -        rst = maxR[n] -    elif rest >= C and S[n] == "o": -        rst += 1 -        if n + (C + 1) < N: -            rst += dfs(n + C + 1, C) -    else: -        if n + 1 < N: -            rst += dfs(n + 1, rest + 1) -    maxR[n] = rst -    return rst - - -def dfs2(n, rest): -    global C, N -    rst = 0 -    if maxL[n] > 0: -        rst = maxL[n] -    elif rest >= C and S[n] == "o": -        rst += 1 -        if n - (C + 1) >= 0: -            rst += dfs2(n - (C + 1), C) -    else: -        if n - 1 >= 0: -            rst += dfs2(n - 1, rest + 1) -    maxL[n] = rst -    return rst - - -maxR = [-1] * N -for i in range(N): -    if maxR[i] == -1: -        maxR[i] = dfs(i, C) -# if maxR[-1] == -1: -#     maxR[-1] = 0 -# for i in range(N - 2, -1, -1): -#     if maxR[i] == -1: -#         maxR[i] = maxR[i + 1] -maxL = [-1] * N -for i in range(N - 1, -1, -1): -    if maxL[i] == -1: -        maxL[i] = dfs2(i, C) -# if maxL[0] == -1: -#     maxL[0] = 0 -# for i in range(1, N): -#     if maxL[i] == -1: -#         maxL[i] = maxL[i - 1] +L = [0] * K +k = 0 +i = 0 +rest = C +while k < K: +    if rest >= C and S[i] == "o": +        L[k] = i +        k += 1 +        rest = 0 +    else: +        rest += 1 +    i += 1 +R = [0] * K +k = K +i = N - 1 +rest = C +while k > 0: +    if rest >= C and S[i] == "o": +        R[k - 1] = i +        k -= 1 +        rest = 0 +    else: +        rest += 1 +    i -= 1 -for i in range(N): -    r = maxR[i + 1] if i + 1 < N else 0 -    l = maxL[i - 1] if i - 1 >= 0 else 0 -    if r + l < K: -        ans.append(i + 1) +for k in range(K): +    if L[k] == R[k]: +        ans.append(L[k] + 1)