#include <cstdio>
#include <algorithm>
#include <cstring>

#define Rep(i, n) for (int i = 1; i <= n; i ++)
#define Rep0(i, n) for (int i = 0; i <= n; i ++)
#define RepG(i, x) for (int i = head[x]; i != -1; i = edge[i].next)
#define mp(a, b) make_pair(a, b)

using namespace std;

const int N = 524288;

int x[N], ll[20][N], rr[20][N], f[N], g[N], sg[N];

bool vv[N];

int main()
{
	//freopen("snake7.in", "r", stdin);
	//freopen("s.out", "w", stdout);
	
	int n, v;
	scanf("%d%d", &n, &v);
	Rep(i, n) scanf("%d", &x[i]);
	
	int k = 0;
	while (true) {
		rr[k][n + 1] = rr[k][n] = n;
		for (int i = n - 1; i; i --) {
			if (x[i] + v >= x[i + 1]) rr[k][i] = rr[k][i + 1];
			else rr[k][i] = i;
		}
		ll[k][0] = ll[k][1] = 1;
		for (int i = 2; i <= n; i ++) {
			if (x[i - 1] + v >= x[i]) ll[k][i] = ll[k][i - 1];
			else ll[k][i] = i;
		}
		k ++;
		if (!v) break;
		v /= 2;
	}
	
	Rep0(s, (1 << k) - 1) f[s] = 0;
	Rep0(s, (1 << k) - 1) g[s] = n + 1;
	
	Rep0(s, (1 << k) - 1){
		//printf("%d %d %d\n", s, f[s], g[s]);
		Rep0(i, k - 1) if (!(s & (1 << i))) {	
			f[s ^ (1 << i)] = max(f[s ^ (1 << i)], rr[i][f[s] + 1]);
			g[s ^ (1 << i)] = min(g[s ^ (1 << i)], ll[i][g[s] - 1]);
		}
	}
	
	Rep0(s, (1 << k) - 1) {
		sg[s] = g[s];
		Rep0(i, k - 1) if (s & (1 << i)) sg[s] = min(sg[s], sg[s ^ (1 << i)]);
	}
	bool flag = false;
	Rep0(s, (1 << k) - 1) if (!(s & 1)) {
		int ss = (((1 << k) - 1) ^ 1) ^ s;
		//printf("%d %d %d %d\n", s, ss, f[s], sg[ss]);
		if (sg[ss] <= f[s] + 1){ flag = true; break;}
		else if (ll[0][f[s] + 1] == ll[0][sg[ss] - 1]){ vv[ll[0][f[s] + 1]] = true; }
	}
	
	if (flag) Rep(i, n) printf("Possible\n");
	else Rep(i, n){
		if (vv[ll[0][i]]) printf("Possible\n");
		else printf("Impossible\n");
	}
	
	return 0;
}
