//waz
#include <bits/stdc++.h>

using namespace std;

#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) ((int)((x).size()))

typedef pair<int, int> PII;
typedef vector<int> VI;
typedef long long int64;
typedef unsigned int uint;
typedef unsigned long long uint64;

#define gi(x) ((x) = F())
#define gii(x, y) (gi(x), gi(y))
#define giii(x, y, z) (gii(x, y), gi(z))

int F()
{
	char ch;
	int x, a;
	while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-');
	if (ch == '-') ch = getchar(), a = -1;
	else a = 1;
	x = ch - '0';
	while (ch = getchar(), ch >= '0' && ch <= '9')
		x = (x << 1) + (x << 3) + ch - '0';
	return a * x;
}

const int N = 1 << 20;

int n, v, x[200010];

int l[22][200010], r[22][200010];

int val[22], cnt, f[N], g[N];

vector<PII> t;

int main()
{
	gii(n, v);
	for (int i = 1; i <= n; ++i) gi(x[i]);
	for (int i = v; ; i = i >> 1)
	{
		val[++cnt] = i;
		for (int j = 1; j <= n; ++j)
		{
			int k = j;
			while (k < n && x[k + 1] - x[k] <= i) ++k;
			for (int p = j; p <= k; ++p) l[cnt][p] = j, r[cnt][p] = k;
			if (cnt == 1) t.pb(mp(j, k));
			j = k;
		}
		if (!i) break;
	}
	int all = cnt - 1;
	for (int i = 0; i < (1 << all); ++i) g[i] = n + 1;
	for (int i = 1; i < (1 << all); ++i)
	{
		for (int j = 0; j < all; ++j)
			if (i & (1 << j))
			{
				int t = f[i ^ (1 << j)];
				f[i] = max(f[i], r[j + 2][t + 1]);
				t = g[i ^ (1 << j)];
				g[i] = min(g[i], l[j + 2][t - 1]);
			}
	}
	for (auto v : t)
	{
		bool flag = 0;
		int s = (1 << all) - 1;
		for (int i = 0; i < (1 << all); ++i)
		{
			if (f[i] >= v.fi - 1 && v.se + 1 >= g[s ^ i])
				flag = 1;
		}
		for (int i = v.fi; i <= v.se; ++i)
			puts(flag ? "Possible" : "Impossible");
	}
}