#include <bits/stdc++.h>

#define debug(x) cout << #x" = " << x;

#define st first
#define nd second

using namespace std;
using namespace placeholders;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;

const int MAXN = 2E5 + 10, MAXD = 19;

int n, V;
int a[MAXN];
int pre[MAXD][MAXN], nex[MAXD][MAXN];
int prem[1 << MAXD], sufm[1 << MAXD];

int cnt[MAXN];

int main(){
	scanf("%d%d", &n, &V);
	for (int i = 1; i <= n; ++i)
		scanf("%d", a + i);
	
	int D = 32 - __builtin_clz(V);
	for (int k = 0; k <= D; ++k){
		int len = V >> D - k;
		pre[k][0] = 1;
		for (int j, i = 1; i <= n; i = j){
			pre[k][i] = i;
			for (j = i + 1; j <= n && a[j] - a[j - 1] <= len; ++j)
				pre[k][j] = i;
		}
		nex[k][n + 1] = n;
		for (int j, i = n; i >= 1; i = j){
			nex[k][i] = i;
			for (j = i - 1; j >= 1 && a[j + 1] - a[j] <= len; --j)
				nex[k][j] = i;
		}
	}

	int n0 = 1 << D;
	prem[0] = 0, sufm[0] = n + 1;
	for (int i = 1; i < n0; ++i){
		prem[i] = 0;
		for (int j = 0; j < D; ++j)
			if (i >> j & 1)
				prem[i] = max(prem[i], nex[j][prem[i ^ 1 << j] + 1]);
	}
	for (int i = 1; i < n0; ++i){
		sufm[i] = n + 1;
		for (int j = 0; j < D; ++j)
			if (i >> j & 1)
				sufm[i] = min(sufm[i], pre[j][sufm[i ^ 1 << j] - 1]);
	}

	for (int i = 0; i < n0; ++i){
		int l = prem[i] + 1, r = sufm[n0 - 1 ^ i] - 1;
		if (l > r){
			++cnt[1], --cnt[n + 1];
			break;
		}
		else{
			if (nex[D][l] >= r)
				++cnt[l], --cnt[nex[D][l] + 1];
			if (pre[D][r] <= l)
				++cnt[pre[D][r]], --cnt[r + 1];
		}
	}

	partial_sum(cnt + 1, cnt + n + 1, cnt + 1);
	for (int i = 1; i <= n; ++i)
		puts(cnt[i] ? "Possible" : "Impossible");

	return 0;
}
