# include <bits/stdc++.h>

using namespace std;

int N, V;

const int maxn = 200010;
bool f[maxn][1<<20];
bool g[maxn][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;
	mask = (1 << m) - 1;

	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] - x[i-1] <= val[j]) r[i][j] = r[i+1][j];
		}
	}

	for(int j = 0; j < 1<<m; ++j) {
		f[0][j] = true;
	}

	for(int i = 1; i < N; ++i) {
		for(int j = 0; j < 1<<m; ++j) {
			for(int k = 0; k < m; ++k) if(j >> k & 1) {
				f[i][j] |= f[max(0, l[i][k] - 1)][j ^ (1<<k)];
				if(f[i][j]) break;
			}
		}
	}

	g[N][0] = true;
	for(int i = N - 1; i >= 0; --i) {
		for(int j = 0; j < 1<m; ++j) {
			for(int k = 0; k < m; ++k) if(j >> k & 1) {
				g[i][j] |= g[r[i][k] + 1][j ^ (1<<k)];
				if(g[i][j]) break;
			}
		}
	}

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