#include <bits/stdc++.h>

const int maxn = 1 << 18;

int n, m, M, v[20], f[maxn + 10], g[maxn + 10], x[maxn + 10], y[maxn + 10], z[maxn + 10], LOG[maxn + 10], ans[maxn + 10], fy[maxn + 10][20], fz[maxn + 10][20];

void chkmax(int &x, int y) {
	(x < y) && (x = y);
	return;
}

void chkmin(int &x, int y) {
	(x > y) && (x = y);
	return;
}

int main() {
	scanf("%d%d", &n, v);
	while(v[m]) {
		v[m + 1] = v[m] >> 1;
		++m;
	}
	v[m] = v[0];
	v[0] = 0;
	M = 1 << m;
	for (int i = 2; i < M; ++i) {
		LOG[i] = LOG[i >> 1] + 1;
	}
	for (int i = 1; i <= n; ++i) {
		scanf("%d", x + i);
		z[i] = y[i - 1] = x[i] - x[i - 1];
	}
	for (int i = 0; i <= m; ++i) {
		int lst = n;
		fy[n][i] = n;
		for (int j = n - 1; j; --j) {
			if(y[j] > v[i]) {
				lst = j;
			}
			fy[j][i] = lst;
		}
		lst = 1;
		fz[1][i] = 1;
		for (int j = 2; j <= n; ++j) {
			if(z[j] > v[i]) {
				lst = j;
			}
			fz[j][i] = lst;
		}
	}
	for (int s = 0; s < M; ++s) {
		g[s] = n + 1;
	}
	for (int s = 1; s < M; ++s) {
		int t = s;
		while(t) {
			int x = (t & (-t)), i = LOG[x], y = s ^ x, j = f[y];
			chkmax(f[s], j == n ? n : fy[j + 1][i]);
			j = g[y];
			chkmin(g[s], j == 1 ? 1 : fz[j - 1][i]);
			t ^= x;
		}
	}
	for (int s = 0; s < M; ++s) {
		int t = M - 1 ^ s;
		int l = f[s] + 1, r = g[t] - 1;
		if(l >= r) {
			for (int i = 1; i <= n; ++i) {
				puts("Possible");
			}
			return 0;
		}
		int i = fy[l][m];
		if(i >= r) {
			++ans[l];
			--ans[r + 1];
		}
	}
	for (int i = 1; i <= n; ++i) {
		ans[i] += ans[i - 1];
		puts(ans[i] ? "Possible" : "Impossible");
	}
	return 0;
}