#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define fi first
#define se second

const int N = 2e5 + 7;

int n, k, a[N], val[19];
int l[19][N], r[19][N];
int pref[1 << 19], suf[1 << 19], mis[N];

int main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> n >> k;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	int bit = 0, sv = k;
	while(sv > 0){
		val[bit++] = sv;
		sv /= 2;
	}
	val[bit++] = 0;
	int pos = 1;
	for(int i = 0; i < bit; i++){
		pos = 1;
		for(int j = 1; j <= n; j++){
			if(pos < j) pos = j;
			while(pos < n && a[pos + 1] - a[pos] <= val[i]) pos++;
			r[i][j] = pos;
		}
		pos = n;
		for(int j = n; j >= 1; j--){
			if(pos > j) pos = j;
			while(pos > 1 && a[pos] - a[pos - 1] <= val[i]) pos--;
			l[i][j] = pos;
		}
	}
	for(int mask = 0; mask < (1 << bit); mask++) suf[mask] = n + 1;
	for(int i = 1; i <= n; i++) mis[i] = n + 1;
	for(int mask = 0; mask < (1 << bit); mask++){
		for(int i = 0; i < bit; i++){
			if((mask & (1 << i))) continue;
			pref[mask ^ (1 << i)] = max(pref[mask ^ (1 << i)], r[i][min(n, pref[mask] + 1)]);
			suf[mask ^ (1 << i)] = min(suf[mask ^ (1 << i)], l[i][max(1, suf[mask] - 1)]);
		}
	}
	int msk = (1 << bit) - 1;
	bool ok = false;
	for(int mask = 0; mask < (1 << bit); mask++){
		if(!(mask & (1 << 0))) continue;
		int rv = (msk ^ mask);
		int now = (mask ^ (1 << 0));
		if(pref[now] + 1 >= suf[rv] - 1) ok = true;
		else mis[pref[now] + 1] = min(mis[pref[now] + 1], suf[rv] - 1);
	}
	for(int i = n - 1; i >= 1; i--) mis[i] = min(mis[i], mis[i + 1]);
	for(int i = 1; i <= n; i++){
		if(ok || mis[l[0][i]] <= r[0][i]) cout << "Possible\n";
		else cout << "Impossible\n";
	}
}
