#include <cstring>
#include <algorithm>
#include <cstdio>
#include <utility>
#include <cstdlib>

using std::pair;
typedef pair<int,int> pii;
const int N = 200010;
const int M = 19;
int _w;

int max( int a, int b ) {
	return a > b ? a : b;
}

int n, v, x[N], m;

int ans[N];
void answer() {
	for( int i = 1; i <= n; ++i )
		puts( ans[i] ? "Possible" : "Impossible" );
	exit(0);
}

int R[M][N];
void prelude() {
	int t = v;
	for( m = 0; ; ++m, t >>= 1 ) {
		R[m][n] = R[m][n+1] = n;
		for( int j = n-1; j >= 1; --j )
			if( x[j+1] - x[j] > t )
				R[m][j] = j;
			else R[m][j] = R[m][j+1];
		if( !t ) break;
	}
	++m;
}

int f[1<<M];
bool check( int l, int r ) {
	memset(f, 0, sizeof f);
	if( l == 1 ) f[0] = r;
	for( int i = 0; i < (1<<m); ++i )
		for( int j = 1; j < m; ++j )
			if( (i&(1<<j)) == 0 ) {
				int k = i|(1<<j);
				f[k] = max( f[k], R[j][f[i]+1] );
				if( f[k] >= l-1 && f[k] <= r )
					f[k] = r;
			}
	return f[(1<<m)-2] == n;
}

void solve() {
	static pii tmp[N];
	static int tn;
	for( int i = 1; i <= n; i = R[0][i]+1 )
		tmp[tn++] = pii(i, R[0][i]);
	if( tn > m ) answer();
	for( int i = 0; i < tn; ++i )
		if( check(tmp[i].first, tmp[i].second) ) {
			for( int j = tmp[i].first; j <= tmp[i].second; ++j )
				ans[j] = 1;
		}
	answer();
}

int main() {
	_w = scanf( "%d%d", &n, &v );
	for( int i = 1; i <= n; ++i )
		_w = scanf( "%d", x+i );
	prelude(), solve();
	return 0;
}
