#include <algorithm>
#include <cstdio>
int pre[200005][25], nxt[200005][25], dp_l[800005], dp_r[800005], arr[200005];
int main()
{
	// freopen("AGC012-F.in", "r", stdin);
	int n, v, len = 0;
	scanf("%d%d", &n, &v);
	for (int i = 1; i <= n; i++)
		scanf("%d", arr + i);
	while (true)
	{
		pre[0][len] = pre[1][len] = 0;
		for (int i = 2; i <= n; i++)
			pre[i][len] = arr[i] - arr[i - 1] <= v ? pre[i - 1][len] : i - 1;
		nxt[n + 1][len] = nxt[n][len] = n + 1;
		for (int i = n - 1; i >= 1; i--)
			nxt[i][len] = arr[i + 1] - arr[i] <= v ? nxt[i + 1][len] : i + 1;
		len++;
		if (!v)
			break;
		v >>= 1;
	}
	for (int i = 0; i < 1 << len; i++)
	{
		dp_l[i] = 1;
		dp_r[i] = n;
	}
	for (int i = 0; i < 1 << len; i++)
	{
		for (int j = 0; j < len; j++)
		{
			if (i & (1 << j))
				continue;
			dp_l[i | (1 << j)] = std::max(dp_l[i | (1 << j)], nxt[dp_l[i]][j]);
			dp_r[i | (1 << j)] = std::min(dp_r[i | (1 << j)], pre[dp_r[i]][j]);
		}
	}
	if (dp_l[(1 << len) - 1] <= n)
	{
		for (int i = 0; i < n; i++)
			puts("Impossible");
		return 0;
	}
	for (int l = 1; l <= n; l = nxt[l][0])
	{
		bool flg = false;
		for (int i = 0; i < 1 << len && !flg; i++)
		{
			if (i & 1)
				continue;
			if (l <= dp_l[i] && dp_r[(1 << len) - 1 ^ i ^ 1] < nxt[l][0])
				flg = true;
		}
		for (int i = l; i < nxt[l][0]; i++)
			puts(flg ? "Possible" : "Impossible");
	}
	return 0;
}
