#include <cstdio>
#include <algorithm>

const int MN = 200005, MM = 18;

int N, V, A[MN], v[MM], M;
int L[MM + 1][MN], R[MM + 1][MN];
int fl[1 << MM], fr[1 << MM];
int val[MN];

int main() {
	scanf("%d%d", &N, &V);
	for (int i = 1; i <= N; ++i) scanf("%d", &A[i]);
	for (int x = V; x; ) v[M++] = x /= 2;
	for (int j = 0; j <= M; ++j) {
		int nv = j ? v[j - 1] : V;
		L[j][0] = L[j][1] = 1, R[j][N + 1] = R[j][N] = N;
		for (int i = 2; i <= N; ++i) L[j][i] = A[i] - A[i - 1] > nv ? i : L[j][i - 1];
		for (int i = N - 1; i >= 1; --i) R[j][i] = A[i + 1] - A[i] > nv ? i : R[j][i + 1];
	}
	fl[0] = 0, fr[0] = N + 1;
	for (int S = 1; S < 1 << M; ++S) {
		fl[S] = 0, fr[S] = N + 1;
		for (int j = 0; j < M; ++j) if (S >> j & 1)
			fl[S] = std::max(fl[S], R[j + 1][fl[S ^ 1 << j] + 1]),
			fr[S] = std::min(fr[S], L[j + 1][fr[S ^ 1 << j] - 1]);
	}
	for (int i = 0; i <= N; ++i) val[i] = N + 2;
	for (int S = 0; S < 1 << M; ++S)
		val[fl[S]] = std::min(val[fl[S]], fr[((1 << M) - 1) ^ S]);
	for (int i = N - 1; i >= 0; --i) val[i] = std::min(val[i], val[i + 1]);
	for (int i = 1; i <= N; ++i) puts(val[L[0][i] - 1] <= R[0][i] + 1 ? "Possible" : "Impossible");
	return 0;
}