#include <cstdio>
#include <algorithm>
int N, V, LOG, a[200001], LE[19][200001], RE[19][200001], F[262144], G[262144], OK[200001];
int main()
{
	scanf("%d%d", &N, &V);
	while (1 << LOG <= V)
		LOG++;
	for (int i = 1; i <= N; i++)
		scanf("%d", a + i);
	for (int i = 0; i <= LOG; i++)
	{
		int *le = LE[i], *re = RE[i];
		le[1] = 1;
		for (int j = 2; j <= N; j++)
			le[j] = a[j] - a[j - 1] <= V >> i ? le[j - 1] : j;
		re[N] = N;
		for (int j = N - 1; j; j--)
			re[j] = a[j + 1] - a[j] <= V >> i ? re[j + 1] : j;
	}
	for (int i = 0; i < 1 << LOG; i++)
	{
		F[i] = 0;
		G[i] = N + 1;
		for (int j = 1; j <= LOG; j++)
			if (i >> j - 1 & 1)
			{
				F[i] = std::max(F[i], F[i - (1 << j - 1)] == N ? N : RE[j][F[i - (1 << j - 1)] + 1]);
				G[i] = std::min(G[i], G[i - (1 << j - 1)] == 1 ? 1 : LE[j][G[i - (1 << j - 1)] - 1]);
			}
	}
	for (int i = 0; i < 1 << LOG; i++)
		if (F[i] + 1 >= G[(1 << LOG) - 1 - i])
		{
			for (int j = N; j--; )
				puts("Possible");
			return 0;
		}
	for (int i = 0; i < 1 << LOG; i++)
		if (RE[0][F[i] + 1] + 1 >= G[(1 << LOG) - 1 - i])
		{
			int R = RE[0][F[i] + 1], L = LE[0][R];
			if (!OK[L])
				std::fill(OK + L, OK + R + 1, 1);
		}
	for (int i = 1; i <= N; i++)
		puts(OK[i] ? "Possible" : "Impossible");
	return 0;
}
