unittest
{
	assert( [ "3 50", "30 20 10" ].parse.expand.solve == "Possible\n2\n1" );
	assert( [ "2 21", "10 10" ].parse.expand.solve == "Impossible" );
//	assert( [ "5 50", "10 20 30 40 50" ].parse.expand.solve == "Possible\n1\n2\n3\n4" );
	assert( [ "5 50", "10 20 30 40 50" ].parse.expand.solve == "Possible\n1\n4\n3\n2" );
	
	assert( [ "5 50", "10 20 10 30 50" ].parse.expand.solve == "Possible\n1\n2\n3\n4" );		// 追加ケース
	assert( [ "5 50", "10 20 10 30 10" ].parse.expand.solve == "Impossible" );					// 追加ケース
}



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 nl = input.front.split.to!( long[] );
	input.popFront;
	auto as = input.front.split.to!( long[] );
	return tuple( nl[ 1 ], as );
}

auto solve( long l, long[] as )
{
	// 最後に残す結び目を判定
	auto c = -1L;
	for( auto i = 1L; i < as.length; i++ )
	{
		if( as[ i - 1 ] + as[ i ] < l ) continue;
		c = i;
		break;
	}
	if( c < 0 ) return "Impossible";
	
	// 両端から結び目を列挙
	auto anss = new long[ as.length - 1 ];
	auto ansi = 0L;
	for( auto i = 1L; i < c; i++ )
	{
		anss[ ansi ] = i;
		ansi++;
	}
	for( auto i = as.length.signed - 1; c <= i; i-- )
	{
		anss[ ansi ] = i;
		ansi++;
	}
	return "Possible\n" ~ anss.to!( string[] ).join( "\n" );
}
