import std.algorithm;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;
import std.format;

auto dp (int n, int c, string s) {
  auto d = new int[n+1];
  d[n] = 0;
  foreach_reverse (i; 0 .. n) {
    debug stderr.writeln ("i = ", i);
    d[i] = d[i+1];
    if (s[i] == 'o') {
      int j = i + 1 + c;
      int v = (j <= n) ? d[j] : 0;
      d[i] = max (d[i], 1 + v); 
    }
  }
  return d;
}

void main() {
  int n, k, c;
  auto s = readln;
  formattedRead (s, " %d %d %d", &n, &k, &c);
  //readf (" %d %d %d", &n, &k, &c);
  s = readln[0 .. n];
  auto d1 = dp (n, c, s);
  auto t = s.dup;
  t.reverse ();
  auto d2 = dp (n, c, t.idup);
  d2.reverse ();
  d2 = dropOne (d2);
  int last = -1;
  debug stderr.writeln ("d1 = ", d1);
  debug stderr.writeln ("d2 = ", d2);
  auto can = new bool[n];
  foreach (i; 0 .. n) {
    if (s[i] == 'x') continue;
    int v1 = 0, j = i + 1;
    if (last >= 0) {
      v1 = d2[last];
      j = max (j, last + 1 + c);
    }
    int v = v1;
    if (j <= n) v += d1[j];
    debug stderr.writefln ("i = %d, j = %d, v1 = %d, v = %d", i, j, v1, v);
    if (v >= k) can[i] = true;
    //if (v < k) writeln (i + 1);
    last = i;
  }
  last = n;
  foreach_reverse (i; 0 .. n) {
    if (s[i] == 'x') continue;
    int v1 = 0, j = i - 1;
    if (last < n) {
      v1 = d1[last];
      j = min (j, last - (1 + c));
    }
    int v = v1;
    if (j >= 0) v += d2[j];
    debug stderr.writefln ("i = %d, j = %d, v1 = %d, v = %d", i, j, v1, v);
    if (v >= k) can[i] = true;
    //if (v < k) writeln (i + 1);
    last = i;
  }
  foreach (i; 0 .. n) if (!can[i] && s[i] == 'o') writeln (i + 1);
}

