#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define sqr(x) ((x)*(x))
#define mp make_pair
#define uint unsigned
#define PI pair<int,int>
inline char gc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
#define gc getchar
inline int read(){
	int x = 0; char ch = gc(); bool positive = 1;
	for (; !isdigit(ch); ch = gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = gc())	x = x * 10 + ch - '0';
	return positive ? x : -x;
}
inline void write(int a){
    if(a<0){
    	a=-a; putchar('-');
	}
    if(a>=10)write(a/10);
    putchar('0'+a%10);
}
inline void writeln(int a){
    if(a<0){
    	a=-a; putchar('-');
	}
	write(a); puts("");
}
inline int rnd(int x){
	return rand()%x;
}
inline ull rnd(){
	return ((ull)rand()<<30^rand())<<4|rand()%4;
}
const int M=20,N=1<<M,inf=1e9+3e5;
int n,v,gao,f[1<<M],g[1<<M],x[N],lst[M][N],nxt[M][N],tong[N];
int main(){
	n=read(); v=read(); x[0]=-inf; x[n+1]=inf;
	for(int i=1;i<=n;i++)x[i]=read();
	for(int i=0;;i++){
		int dali=v>>i; gao=i; nxt[i][n+1]=n; lst[i][0]=1;
		for(int j=1;j<=n;j++)if(x[j]-x[j-1]<=dali)lst[i][j]=lst[i][j-1]; else lst[i][j]=j;
		for(int j=n;j;j--)if(x[j+1]-x[j]<=dali)nxt[i][j]=nxt[i][j+1]; else nxt[i][j]=j;
		if((v>>i)==0)break;
	}
	f[0]=0; g[0]=n+1; 
	for(int i=1;i<(1<<gao);i++){
		f[i]=0; g[i]=n+1;
		for(int j=0;j<gao;j++)if(i>>j&1)f[i]=max(f[i],nxt[j+1][f[i^(1<<j)]+1]);
		for(int j=0;j<gao;j++)if(i>>j&1)g[i]=min(g[i],lst[j+1][g[i^(1<<j)]-1]);
	}
	for(int i=0;i<=n+1;i++)tong[i]=-1;
	for(int i=0;i<(1<<gao);i++){
		int l=f[i],r=g[((1<<gao)-1)^i];
		tong[r]=max(tong[r],l);
	}
	for(int i=1;i<=n;i++)tong[i]=max(tong[i],tong[i-1]);
	for(int i=1;i<=n;i++){
		int l=lst[0][i],r=nxt[0][i];
		puts(tong[r+1]>=l-1?"Possible":"Impossible");
	}
}