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 S[i] == 'o' and 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 S[i] == 'o' and 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')

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')

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 S[i] == "o" and 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 S[i] == "o" and 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")

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")

-    if S[i] == "o" and maxR[i] == -1: +    if maxR[i] == -1: -if maxR[-1] == -1: -    maxR[-1] = 0 -for i in range(N - 2, -1, -1): -    if maxR[i] == -1: -        maxR[i] = maxR[i + 1] +# if maxR[-1] == -1: +#     maxR[-1] = 0 +# for i in range(N - 2, -1, -1): +#     if maxR[i] == -1: +#         maxR[i] = maxR[i + 1] -    if S[i] == "o" and maxL[i] == -1: +    if maxL[i] == -1: -if maxL[0] == -1: -    maxL[0] = 0 -for i in range(1, N): -    if maxL[i] == -1: -        maxL[i] = maxL[i - 1] +# if maxL[0] == -1: +#     maxL[0] = 0 +# for i in range(1, N): +#     if maxL[i] == -1: +#         maxL[i] = maxL[i - 1]