#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;

const int MAXN = 2e6 + 10;
int N, V;
int X[MAXN];
int v[MAXN], vn;
int l[19][MAXN], r[19][MAXN];
int f[MAXN], g[MAXN], h[MAXN];

int main() {
	register int s, i, j;
	scanf("%d%d", &N, &V);
	for(i = 1; i <= N; ++i)
		scanf("%d", X + i);
	v[0] = V; V >>= 1;
	while(V)
		v[++vn] = V, V >>= 1;
	v[++vn] = 0;
	reverse(v, v + vn + 1);
	for(i = 0; i <= vn; ++i) {
		l[i][1] = 1;
		for(j = 2; j <= N; ++j)
			l[i][j] = X[j] - X[j - 1] <= v[i] ? l[i][j - 1] : j;
		r[i][N] = N;
		for(j = N - 1; j; --j)
			r[i][j] = X[j + 1] - X[j] <= v[i] ? r[i][j + 1] : j;
	}
	f[0] = 0; g[0] = N + 1;
	for(s = 1; s <= (1 << (vn + 1)) - 1; ++s) {
		f[s] = 0; g[s] = N + 1;
		for(i = 0; i <= vn; ++i)
			if(s & (1 << i)) {
				int x = s ^ (1 << i);
				f[s] = max(f[s], f[x] == N ? N : r[i][f[x] + 1]);
				g[s] = min(g[s], g[x] == 1 ? 1 : l[i][g[x] - 1]);
			}
	}
	for(i = 0; i <= N; ++i)
		h[i] = N + 2;
	for(i = 0; i <= (1 << vn) - 1; ++i)
		h[f[i]] = min(h[f[i]], g[((1 << vn) - 1) ^ i]);
	for(i = N - 1; i >= 0; --i)
		h[i] = min(h[i], h[i + 1]);
	for(i = 1; i <= N; ++i)
		puts(h[l[vn][i] - 1] <= r[vn][i] + 1 ? "Possible" : "Impossible");
	return 0;
}