#include <bits/stdc++.h>

#define FI(i,a,b) for(int i=(a);i<=(b);i++)
#define FD(i,a,b) for(int i=(a);i>=(b);i--)

#define LL long long
#define Ldouble long double
#define PI 3.1415926535897932384626

#define PII pair<int,int>
#define PLL pair<LL,LL>
#define mp make_pair
#define fi first
#define se second

using namespace std;

int n, v, s[200005], pt, previous_pt = 1, p;
int fr[200005][20], dv[20];

void gen(int l, int r, int V){
//	printf("[%d %d %d]\n", l, r, V);
	FI(i, l, r){
		if(V) printf("Possible\n");
		else printf("Impossible\n");
	}
	return;
}

int dp[1111111];

bool res(int X){
	FI(i, 0, (1 << p + 1) - 1) dp[i] = -1;
	dp[0] = 0;
	FI(i, 0, (1 << p + 1) - 1){
		if(dp[i] == -1) continue;
		FI(j, 0, p){
			if(i & (1 << j)){}
			else{
				if(j == 0 && dp[i] + 1 != X) continue;
				if(j != 0 && dp[i] + 1 == X) continue;
				dp[i + (1 << j)] = max(dp[i + (1 << j)], fr[dp[i] + 1][j]);
			}
		}
	}
	FI(i, 0, (1 << p + 1) - 1) if(dp[i] == n) return true;
	return false;
}

int main(){
	scanf("%d %d", &n, &v);
	FI(i, 1, n) scanf("%d", &s[i]);
	FI(i, 2, n) if(s[i] - s[i - 1] > v) pt++;
	
	dv[0] = v;
	while(dv[p]){
		dv[p + 1] = dv[p];
		dv[++p] /= 2;
	}
	
	FI(i, 0, p){
		int q = 1;
		FI(j, 1, n){
			q = max(q, j);
			while(q < n && s[q + 1] - s[q] <= dv[i]) q++;
			fr[j][i] = q;
		}
		fr[n + 1][i] = n;
	}
	
	if(pt >= 20){
		FI(i, 1, n) printf("Impossible\n");
		return 0;
	}
	FI(i, 2, n) if(s[i] - s[i - 1] > v){
		gen(previous_pt, i - 1, res(previous_pt));
		previous_pt = i;
	}
	gen(previous_pt, n, res(previous_pt));
	return 0;
}
