#include <bits/stdc++.h>
using namespace std;

const int MAXN = 200005;

int n, v[20];
int a[MAXN];
int f[20][MAXN], g[20][MAXN];

int fl[1<<20|1], fr[1<<20|1];

int main()
{
	scanf("%d%d", &n, &v[0]);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	int lev = 0;
	for (int i = 0; ; i++) {
		lev = i;
		f[i][n+1] = n+1;
		g[i][0] = 0;
		for (int j = n; j >= 1; j--) {
			f[i][j] = j;
			if (j < n && a[j+1]-a[j] <= v[i])
				f[i][j] = f[i][j+1];
		}
		for (int j = 1; j <= n; j++) {
			g[i][j] = j;
			if (j > 1 && a[j]-a[j-1] <= v[i])
				g[i][j] = g[i][j-1];
		}
		if (v[i] == 0) break;
		v[i+1] = v[i]>>1;
	}
	fl[0] = 0, fr[0] = n+1;
	for (int i = 1; i < 1<<(lev+1); i++) {
		fl[i] = 1, fr[i] = n;
		for (int k = 0; k <= lev; k++)
			if (i>>k&1) {
				fl[i] = max(fl[i], f[k][fl[(i^(1<<k))]+1]);
				fr[i] = min(fr[i], g[k][fr[(i^(1<<k))]-1]);
			}
	}
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		if (f[0][i] != f[0][i-1])
			cnt++;
	}
	// cerr << cnt << " " << lev+1 << endl;
	if (cnt > lev+1) {
		for (int i = 1; i <= n; i++) puts("Impossible");
	} else {
		int last = 0;
		for (int i = 1; i <= n; i++) {
			if (f[0][i] != f[0][i-1]) {
				// cerr << i << endl;
				int tot = (1<<(lev+1))-1-1;
				last = 0;
				for (int j = tot; j >= 0; j = (j-1)&tot) {
					// cerr << j << " " << (tot^j) << " " << fl[j] << " " << fr[tot^j] << endl;
					if (fl[j] >= i-1 && fr[tot^j] <= f[0][i]+1) {
						last = 1;
						break;
					}
					if (j == 0) break;
				}
			}
			if (last == 0) puts("Impossible");
			else puts("Possible");
		}
	}
	return 0;
}
