#include <bits/stdc++.h> 
using namespace std; 
int gi() { 
	int res = 0, w = 1; 
	char ch = getchar(); 
	while (ch != '-' && !isdigit(ch)) ch = getchar(); 
	if (ch == '-') w = -1, ch = getchar(); 
	while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar(); 
	return res * w; 
} 
const int MAX_N = 2e5 + 5; 
int N, V[20], t; 
int x[MAX_N], L[20][MAX_N], R[20][MAX_N]; 
int sl[1 << 19], sr[1 << 19], cr[MAX_N]; 
void chkmax(int &x, int y) { if (x < y) x = y; } 
void chkmin(int &x, int y) { if (x > y) x = y; } 
int main () { 
#ifndef ONLINE_JUDGE 
    freopen("cpp.in", "r", stdin); 
#endif 
	N = gi(), V[0] = gi(); 
	for (int i = 1; i <= N; i++) x[i] = gi(); 
	while (V[t]) V[t + 1] = V[t] >> 1, ++t; 
	for (int i = 0; i <= t; i++) { 
		L[i][1] = 1, R[i][N] = N; 
		for (int j = 2; j <= N; j++) 
			if (x[j] - x[j - 1] <= V[i]) L[i][j] = L[i][j - 1]; 
			else L[i][j] = j; 
		for (int j = N - 1; ~j; j--) 
			if (x[j + 1] - x[j] <= V[i]) R[i][j] = R[i][j + 1]; 
			else R[i][j] = j; 
	}
	for (int i = 1; i < 1 << t; i++) sl[i] = 1, sr[i] = N; 
	sl[0] = 0, sr[0] = N + 1; 
	for (int s = 0; s < 1 << t; s++) { 
		for (int i = 1; i <= t; i++) 
			if (!(s >> (i - 1) & 1)) { 
				chkmax(sl[s | 1 << (i - 1)], R[i][sl[s] + 1]); 
				chkmin(sr[s | 1 << (i - 1)], L[i][sr[s] - 1]); 
			} 
	} 
	for (int i = 0; i <= N; i++) cr[i] = 1e9; 
	int S = (1 << t) - 1; 
	for (int i = 0; i < 1 << t; i++) chkmin(cr[sl[i]], sr[S ^ i]); 
	for (int i = N - 1; ~i; i--) chkmin(cr[i], cr[i + 1]); 
	for (int i = 1; i <= N; i++) puts(cr[L[0][i] - 1] <= R[0][i] + 1 ? "Possible" : "Impossible"); 
    return 0; 
} 