#include<bits/stdc++.h>
using namespace std;
int n, v, num[200007], val[20], l, tl[200007][20], tr[200007][20], dp1[500007], dp2[500007], s;
int mn[200007];
int read()
{
	int num = 0, f = 1;
	char c = getchar();
	while ((c < '0' || c>'9') && c != '-')c = getchar();
	if (c == '-')f = -1, c = getchar();
	while (c >= '0' && c <= '9')num = num * 10 + c - '0', c = getchar();
	return num * f;
}
int main()
{
	n = read();
	v = read();
	for (int i = 1; i <= n; i++)
		num[i] = read();
	while (v >> l)l++;
	val[l] = v;
	for (int i = l - 1; i >= 0; i--)
		val[i] = (val[i + 1] >> 1);
	for (int i = 0; i <= l; i++)
		tl[1][i] = 1;
	for (int i = 2; i <= n; i++)
		for (int j = 0; j <= l; j++)
			if (num[i] - num[i - 1] > val[j])
				tl[i][j] = i;
			else tl[i][j] = tl[i - 1][j];
	for (int i = 0; i <= l; i++)
		tr[n][i] = n;
	for (int i = n - 1; i >= 1; i--)
		for (int j = 0; j <= l; j++)
			if (num[i + 1] - num[i] > val[j])
				tr[i][j] = i;
			else tr[i][j] = tr[i + 1][j];
	for (int i = 0; i < (1 << l); i++)
		for (int j = 0; j < l; j++)
			if (!((i >> j) & 1))
				dp1[i ^ (1 << j)] = max(dp1[i ^ (1 << j)], dp1[i] == n ? n : tr[dp1[i] + 1][j]);
	memset(dp2, 0x3f3f3f, sizeof dp2);
	dp2[0] = n + 1;
	for (int i = 0; i < (1 << l); i++)
		for (int j = 0; j < l; j++)
			if (!((i >> j) & 1))
				dp2[i ^ (1 << j)] = min(dp2[i ^ (1 << j)], dp2[i] == 1 ? 1 : tl[dp2[i] - 1][j]);
	s = (1 << l) - 1;
	memset(mn, 0x3f3f3f, sizeof mn);
	for (int i = 0; i <= s; i++)
		mn[dp1[i]] = min(mn[dp1[i]], dp2[i ^ s]);
	for (int i = n; i >= 0; i--)
		mn[i] = min(mn[i], mn[i + 1]);
	for (int i = 1; i <= n; i++)
		if (mn[tl[i][l] - 1] <= tr[i][l] + 1)
			printf("Possible\n");
		else printf("Impossible\n");
	return 0;
}