#include <bits/stdc++.h>

const int MAXN = 524289;
int n, V, xs[MAXN];
int ls[MAXN], rs[MAXN], bak;
int L[32][MAXN], R[32][MAXN];
int pre[MAXN], suc[MAXN];
void getmax(int & x, int y) { x < y ? x = y : 0; }
void getmin(int & x, int y) { x > y ? x = y : 0; }
int main() {
	std::ios_base::sync_with_stdio(false), std::cin.tie(0);
	std::cin >> n >> V;
	for (int i = 1; i <= n; ++i) std::cin >> xs[i];
	int T = 0;
	for (; ; ++T, V >>= 1) {
		int lst = 1;
		for (int i = 2; i <= n + 1; ++i)
			if (xs[i] - xs[i - 1] > V || i == n + 1) {
				int l = lst, r = i - 1;
				if (!T) ls[++bak] = l, rs[bak] = r;
				else for (int j = l; j <= r; ++j)
					L[T - 1][j] = l, R[T - 1][j] = r;
				lst = i;
			}
		if (!V) break;
	}
	const int U = 1 << T;
	for (int i = 0; i != U; ++i) suc[i] = n + 1;
	for (int i = 0; i != U; ++i)
		for (int j = 0; j != T; ++j)
			if (~i >> j & 1) {
				getmax(pre[i | 1 << j], R[j][pre[i] + 1]);
				getmin(suc[i | 1 << j], L[j][suc[i] - 1]);
			}
	for (int i = 1; i <= bak; ++i) {
		bool can = false;
		if (bak <= 40) {
			for (int j = 0; j != U; ++j)
				if (pre[j] >= ls[i] - 1 && suc[U - j - 1] <= rs[i] + 1) {
					can = true;
					break;
				}
		}
		for (int j = ls[i]; j <= rs[i]; ++j)
			std::cout << (can ? "Possible\n" : "Impossible\n");
	}
	return 0;
}
