# include <bits/stdc++.h>

using namespace std;

int N, V;

const int maxn = 200010;
int f[1<<20], g[1<<20];
int x[maxn], l[maxn][20], r[maxn][20];

int val[20];
int m, mask;

int main() {
	scanf("%d%d", &N, &V);
	for(int i = 0; i < N; ++i) scanf("%d", &x[i]);
	for(int v = V; v; v /= 2) val[m++] = v;
	val[m++] = 0;
	mask = (1 << m) - 2;

	for(int i = 0; i < N; ++i) {
		for(int j = 0; j < m; ++j) {
			l[i][j] = i;
			if(i && x[i] - x[i-1] <= val[j]) l[i][j] = l[i-1][j];
		}
	}

	for(int i = N - 1; i >= 0; --i) {
		for(int j = 0; j < m; ++j) {
			r[i][j] = i;
			if(i + 1 < N && x[i+1] - x[i] <= val[j]) r[i][j] = r[i+1][j];
		}
	}

	f[0] = 0;
	for(int i = 0; i < 1<<m; ++i)
		for(int j = 0; j < m; ++j) if((~i) >> j & 1) 
			f[i | (1<<j)] = max(f[i | (1<<j)], f[i]==N?N:r[f[i]][j] + 1);

	memset(g, 0x3f, sizeof(g));
	g[0] = N - 1;
	for(int i = 0; i < 1<<m; ++i)
		for(int j = 0; j < m; ++j) if((~i) >> j & 1) 
			g[i | (1<<j)] = min(g[i | (1<<j)], g[i]==-1?-1:l[g[i]][j] - 1);

	for(int i = 0; i < N; i = r[i][0] + 1) {
		bool flag = false;
		for(int k = 0; k < 1<<m; k += 2) {
			if(f[k] >= i && g[k ^ mask] <= r[i][0]) {
				flag = true; break;
			}
		}
		if(flag) for(int j = i; j <= r[i][0]; ++j) puts("Possible");
		else for(int j = i; j <= r[i][0]; ++j) puts("Impossible");
	}
	return 0;
}
