#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back

typedef long long ll;
typedef long double ld;

using namespace std;

const int MAXN = 200010;

const int LG = 22;
int x[MAXN], p[MAXN][LG], f[MAXN * 3], v[MAXN], vs = 0;
int f2[MAXN * 3],  p2[MAXN][LG];

int main()
{
	int n;
	scanf("%d%d", &n, v);
	vs = 0;
	while (v[vs] > 0)
	{
		v[vs + 1] = v[vs] / 2;
		vs++;
	}
	vs++;
	for (int i = 0; i < n; i++)
		scanf("%d", x + i);

	for (int i = 0; i < vs; i++)
	{
		p[n][i] = p[n - 1][i] = n;
		for (int j = n - 2; j >= 0; j--)
		{
			if (x[j + 1] - x[j] > v[i]) p[j][i] = j + 1;
			else p[j][i] = p[j + 1][i];
		}
	}
	for (int i = 0; i < vs; i++)
	{
		p2[0][i] = p2[1][i] = 0;
		for (int j = 2; j <= n; j++)
		{
			if (x[j - 1] - x[j - 2] > v[i]) p2[j][i] = j - 1;
			else p2[j][i] = p2[j - 1][i];
		}
	}
	memset(f, 0, sizeof(f));
	for (int i = 0; i < (1 << vs); i++)
		for (int j = 0; j < vs; j++)
		{
			if (i & (1 << j)) continue;
			int nv = i + (1 << j);
			f[nv] = max(f[nv], p[f[i]][j]);
		}
	for (int i = 0; i < (1 << vs); i++) f2[i] = n;
	for (int i = 0; i < (1 << vs); i++)
		for (int j = 0; j < vs; j++)
		{
			if (i & (1 << j)) continue;
			int nv = i + (1 << j);
			f2[nv] = min(f2[nv], p2[f2[i]][j]);

		}
	int msk = (1 << vs) - 1;
	
	int l, r;
	for (l = 0; l != n; l = r)
	{
		r = p[l][0];
		bool ok = false;
		for (int i = 0; i < (1 << vs); i++)
		{
			if (i & 1) continue;
			if ((f[i] >= l) && (f2[msk - 1 - i] <= r))
				ok = true;
		}
		for (int i = l; i < r; i++)
			if (!ok) printf("Impossible\n");
			else printf("Possible\n");
	}
	return 0;
}
