#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 200005;
int d[maxn], f[524290], g[524290];
int h[20][maxn][2], n, m, i, j, k, LG, b[30], cnt;
inline int solve(int m)
{
	if (m == 0)
	{
		b[0] = 1;
		return 1;
	}
	int nex = solve(m >> 1);
	b[nex] = m;
	return nex + 1;
}
inline int lower(int x, int t)
{
	int l = 1, r = n;
	while (l < r - 1)
	{
		int mid = l + r >> 1;
		if (h[t][mid][1] <= x) l = mid;
		else r = mid;
	}
	if (h[t][l][1] > x) return h[t][l][1];
	else return h[t][r][1];
}
inline int upper(int x, int t)
{
	int l = 1, r = n;
	while (l < r - 1)
	{
		int mid = l + r >> 1;
		if (h[t][mid][0] < x) l = mid;
		else r = mid;
	}
	if (h[t][r][0] < x) return h[t][r][0];
	else return h[t][l][0];
}
int main()
{
	cin >> n >> m;
	LG = solve(m);
	for(i = 1; i <= n; i ++)
		scanf("%d", &d[i]);
	for(j = 0; j < LG; j ++)
	{
		int lim = b[j];
		for(i = 1; i <= n;)
		{
			k = i;
			while (d[k + 1] - d[k] <= lim && k + 1 <= n) k ++;
			for(int l = i; l <= k; l ++)
				h[j][l][0] = i, h[j][l][1] = k;
			i = k + 1;
			if (j == LG - 1) cnt ++;
		}
	}
	if (cnt >= 19)
	{
		for(i = 1; i <= n; i ++)
			puts("Impossible");
		return 0;
	}
	int all = 1 << LG - 1;
	for(int s = 0; s < all; s ++)
		g[s] = n + 1;
	for(int s = 0; s < all; s ++)
		for(i = 0; i < LG - 1; i ++)
			if (!(s >> i & 1))
			{
				int opt = s | (1 << i);
				f[opt] = max(f[opt], lower(f[s], i));
				g[opt] = min(g[opt], upper(g[s], i));
			}
	for(i = 1; i <= n;)
	{
		bool ok = 0;
		for(j = all - 1; ; j = (j - 1) & (all - 1))
		{
			if (f[j] >= i - 1 && g[(all - 1) ^ j] <= h[LG - 1][i][1] + 1) {ok = 1; break;}
			if (j == 0) break;
		}
		for(j = i; j <= h[LG - 1][i][1]; j ++)
			if (ok) puts("Possible");
			else puts("Impossible");
		i = h[LG - 1][i][1] + 1;
	}
}