#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<bitset>
#include<string>
#include<cstdio>
#include<cctype>
#include<cassert>
#include<cstdlib>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>

#define For(i,x,y) for (int i=x;i<y;i++)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define lf else if

#define dprintf(...) fprintf(stderr,__VA_ARGS__)
using namespace std;

typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef vector<int> Vi;

int IN(){
	int c,f,x;
	while (!isdigit(c=getchar())&&c!='-');c=='-'?(f=1,x=0):(f=0,x=c-'0');
	while (isdigit(c=getchar())) x=(x<<1)+(x<<3)+c-'0';return !f?x:-x;
}

const int N=200000+19;

int f[1<<20],g[1<<20];
int x[N],A[20][N],B[20][N];
int n,V,pV,mx;

int main(){
	n=IN(),pV=V=IN();
	For(i,1,n+1) x[i]=IN();
	for (mx=0;;mx++){
		int sum=0;
		for (int l=1,r;l<=n;l=r+1){
			for (r=l;r+1<=n&&x[r+1]-x[r]<=V;r++);
			For(i,l,r+1) A[mx][i]=r,B[mx][i]=l;
			sum++;
		}
		if (mx==0&&sum>20){
			For(i,1,n+1) puts("Impossible");
			return 0;
		}
		if (V==0) break;
		V/=2;
	}
	For(t,0,1<<mx){
		f[t]=0;
		g[t]=n+1;
	}
	For(t,0,1<<mx){
		For(i,0,mx) if (!(t>>i&1)){
			f[t|1<<i]=max(f[t|1<<i],A[i+1][f[t]+1]);
			g[t|1<<i]=min(g[t|1<<i],B[i+1][g[t]-1]);
		}
	}
	V=pV;
	for (int l=1,r;l<=n;l=r+1){
		bool chk=0;
		for (r=l;r+1<=n&&x[r+1]-x[r]<=V;r++);
		For(t,0,1<<mx){
			if (f[t]>=l-1&&g[((1<<mx)-1)^t]<=r+1) chk=1;
		}
		For(i,l,r+1) puts(chk?"Possible":"Impossible");
	}
}