#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 9;
int n, v, l[N][20], r[N][20], x[N], p, f[1 << 20], g[1 << 20], dp[N];

void Max (int &x, int y) { if (x < y) x = y; }
void Min (int &x, int y) { if (x > y) x = y; }

bool Judge (int x) {
	return dp[l[x][0] - 1] <= r[x][0] + 1;
}

int main () {
	scanf("%d%d", &n, &v);
	for (int i = 1; i <= n; ++i) scanf("%d", &x[i]);
	for (p = 0; v; v >>= 1, ++p) {
		l[0][p] = l[1][p] = 1; for (int j = 2; j <= n; ++j) l[j][p] = x[j] - x[j - 1] <= v ? l[j - 1][p] : j;
		r[n + 1][p] = r[n][p] = n; for (int j = n - 1; j; --j) r[j][p] = x[j + 1] - x[j] <= v ? r[j + 1][p] : j;
	}
	for (int i = 1; i <= n; ++i) l[i][p] = r[i][p] = i;
	g[0] = n + 1;
	for (int i = 1; i < (1 << p); ++i) {
		g[i] = 0x3f3f3f3f;
		for (int j = 0; j < p; ++j) if (i >> j & 1) {
			Max(f[i], r[f[i ^ (1 << j)] + 1][j + 1]);
			Min(g[i], l[g[i ^ (1 << j)] - 1][j + 1]);
		}
	}
	for (int i = 0; i <= n; ++i) dp[i] = 0x3f3f3f3f;
	for (int i = 0; i < (1 << p); ++i) Min(dp[f[i]], g[((1 << p) - 1) ^ i]);
	for (int i = n - 1; i; --i) Min(dp[i], dp[i + 1]);
	for (int i = 1; i <= n; ++i) puts(Judge(i) ? "Possible" : "Impossible");
	return 0;
}