def solve():

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

  workable = [i for i, s in enumerate(eval(input())) if s=="o"]

  if len(workable) == K:

    return workable

  

  def to_left():

    prev = workable[-1]+C+1

    for x in reversed(workable):

      if prev - x > C:

        yield x

        prev = x

  latest = set(to_left())

  if len(latest) > K:

    return []

  def to_right():

    prev = -C-1

    for x in workable:

      if x - prev > C:

        if x in latest:

          yield x

        prev = x

  return to_right()



for i in solve():

  print((i+1))

def solve():

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

  workable = [i+1 for i, s in enumerate(eval(input())) if s=="o"]

  if len(workable) == K:

    return workable

    

  latest = set()

  prev = workable[-1]+C+1

  for x in reversed(workable):

    if prev - x > C:

      latest.add(x)

      prev = x

      if len(latest) > K:

        return []

  must = []

  prev = -C-1

  for x in workable:

    if x - prev > C:

      if x in latest:

        must.append(x)

      prev = x

  return must



print(("\n".join(map(str, solve()))))
def solve():
    N, K, C = list(map(int, input().split()))
    workable = [i for i, s in enumerate(eval(input())) if s == "o"]
    if len(workable) == K:
        return workable

    def to_left():
        prev = workable[-1] + C + 1
        for x in reversed(workable):
            if prev - x > C:
                yield x
                prev = x

    latest = set(to_left())
    if len(latest) > K:
        return []

    def to_right():
        prev = -C - 1
        for x in workable:
            if x - prev > C:
                if x in latest:
                    yield x
                prev = x

    return to_right()


for i in solve():
    print((i + 1))

def solve():
    N, K, C = list(map(int, input().split()))
    workable = [i + 1 for i, s in enumerate(eval(input())) if s == "o"]
    if len(workable) == K:
        return workable
    latest = set()
    prev = workable[-1] + C + 1
    for x in reversed(workable):
        if prev - x > C:
            latest.add(x)
            prev = x
            if len(latest) > K:
                return []
    must = []
    prev = -C - 1
    for x in workable:
        if x - prev > C:
            if x in latest:
                must.append(x)
            prev = x
    return must


print(("\n".join(map(str, solve()))))

-    workable = [i for i, s in enumerate(eval(input())) if s == "o"] +    workable = [i + 1 for i, s in enumerate(eval(input())) if s == "o"] - -    def to_left(): -        prev = workable[-1] + C + 1 -        for x in reversed(workable): -            if prev - x > C: -                yield x -                prev = x - -    latest = set(to_left()) -    if len(latest) > K: -        return [] - -    def to_right(): -        prev = -C - 1 -        for x in workable: -            if x - prev > C: -                if x in latest: -                    yield x -                prev = x - -    return to_right() +    latest = set() +    prev = workable[-1] + C + 1 +    for x in reversed(workable): +        if prev - x > C: +            latest.add(x) +            prev = x +            if len(latest) > K: +                return [] +    must = [] +    prev = -C - 1 +    for x in workable: +        if x - prev > C: +            if x in latest: +                must.append(x) +            prev = x +    return must -for i in solve(): -    print((i + 1)) +print(("\n".join(map(str, solve()))))