unittest
{
	assert( [ "11 3 2", "ooxxxoxxxoo" ].parse.expand.solve == "6" );
	assert( [ "5 2 3", "ooxoo" ].parse.expand.solve == "1\n5" );
	assert( [ "5 1 0", "ooooo" ].parse.expand.solve == "" );
	assert( [ "16 4 3", "ooxxoxoxxxoxoxxo" ].parse.expand.solve == "11\n16" );
}



import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nkc = input.front.split.to!( long[] );
	input.popFront;
	auto s = input.front.to!( dchar[] );
	return tuple( nkc[ 1 ], nkc[ 2 ], s );
}

auto solve( long k, long c, dchar[] s )
{
	// 一番早く働く場合の働く日を判定
	long[] fs;
	for( auto i = 0L; i < s.length; i++ )
	{
		if( s[ i ] == 'o' )
		{
			fs ~= i;
			i += c;
		}
	}
	
	// 働く日の最大日数がkを超えるときは全ての働く日が確定しない
	if( k < fs.length ) return "";
	
	// 一番遅く働く場合の働く日を判定
	long[] ds;
	for( auto i = s.length.signed - 1; 0 <= i; i-- )
	{
		if( s[ i ] == 'o' )
		{
			ds ~= i;
			i -= c;
		}
	}
	
	// 一番早く働く場合と一番遅く働く場合で働く日が同じなら確定
	long[] anss;
	foreach( f, d; lockstep( fs, ds.retro ) )
	{
		if( f == d ) anss ~= f + 1;
	}
	return anss.empty ? "" : anss.to!( string[] ).join( "\n" );
}
