#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

template <class T>
inline void relax(T &a, const T &b)
{
	if (b > a)
		a = b;
}
template <class T>
inline void tense(T &a, const T &b)
{
	if (b < a)
		a = b;
}

const int MaxN = 200000;
const int MaxM = 200000;
const int MaxNF = 18;

int n, m;
int a[MaxN + 1];

int nF = 0;
int d[MaxNF + 1];

int f[1 << MaxNF], vl[MaxN + 1][MaxNF + 1];
int g[1 << MaxNF], vr[MaxN + 1][MaxNF + 1];

int h[MaxN + 1];

int main()
{
	ios::sync_with_stdio(false);

	cin >> n >> m;
	for (int i = 1; i <= n; ++i)
		cin >> a[i];

	while (1 << nF <= m)
		++nF;
	for (int i = nF; i >= 0; --i)
		d[i] = m, m >>= 1;

	for (int i = 0; i <= nF; ++i)
		vl[0][i] = 0, vr[n + 1][i] = n + 1;
	for (int i = 1; i <= n; ++i)
		for (int j = 0; j <= nF; ++j)
			vl[i][j] = a[i] - a[i - 1] <= d[j] ? vl[i - 1][j] : i - 1;
	for (int i = n; i; --i)
		for (int j = 0; j <= nF; ++j)
			vr[i][j] = a[i + 1] - a[i] <= d[j] ? vr[i + 1][j] : i + 1;

	for (int s = 0; s < 1 << nF; ++s)
	{
		f[s] = 1, g[s] = n;
		for (int i = 0; i < nF; ++i)
		{
			if (~s >> i & 1)
				continue;
			relax(f[s], vr[f[s ^ 1 << i]][i]);
			tense(g[s], vl[g[s ^ 1 << i]][i]);
		}
	}

	for (int s = 0; s < 1 << nF; ++s)
		relax(h[g[s]], f[s ^ ((1 << nF) - 1)]);
	for (int i = 1; i <= n; ++i)
		relax(h[i], h[i - 1]);

	for (int i = 1; i <= n; ++i)
		puts(h[vr[i][nF] - 1] > vl[i][nF] ? "Possible" : "Impossible");

	return 0;
}