#include<bits/stdc++.h>
#define rep(i,a,b) for (int i=(a); i<=(b); ++i)
#define per(i,a,b) for (int i=(a); i>=(b); --i)
using namespace std;

const int maxn = 400005;
int f[maxn][20], g[maxn][20], pre[1<<19], suf[1<<19];
int x[maxn], ans[maxn], d[20], n, m, v;

int main() {
	scanf("%d%d", &n, &v); d[0] = v;
	while (v) d[++m] = v/2, v /= 2;
	rep (i, 1, n) scanf("%d", &x[i]);
	rep (i, 1, n) rep (j, 0, m)
		if (i >= 2 && x[i] - x[i-1] <= d[j]) f[i][j] = f[i-1][j];
		else f[i][j] = i;
	per (i, n, 1) rep (j, 0, m)
		if (i <= n-1 && x[i+1] - x[i] <= d[j]) g[i][j] = g[i+1][j];
		else g[i][j] = i;
	memset(pre, 0xc0, sizeof pre);
	memset(suf, 0x3f, sizeof suf);
	pre[0] = 0; suf[0] = n+1;
	int ALL = (1<<m)-1;
	rep (i, 0, ALL) rep (j, 0, m-1) if (!(i>>j&1)) {
		if (pre[i] == n) pre[i|1<<j] = n;
		else pre[i|1<<j] = max(pre[i|1<<j], g[pre[i]+1][j+1]);
		if (suf[i] == 1) suf[i|1<<j] = 1;
		else suf[i|1<<j] = min(suf[i|1<<j], f[suf[i]-1][j+1]);
	}
	int l = 1, r, tot = 0, flag;
	while (l <= n) {
		r = l; if (tot++ > m) break;
		while (r + 1 <= n && x[r+1] - x[r] <= d[0]) r++;
		flag = 0;
		rep (i, 0, ALL)
			if (pre[i] >= l-1 && suf[(~i)&ALL] <= r+1) {
				flag = 1; break;
			}
		rep (i, l, r) ans[i] = flag;
		l = r + 1;
	}
	rep (i, 1, n) puts(ans[i] ? "Possible" : "Impossible");
	return 0;
}