#include<bits/stdc++.h>
const int MN=300000+5;
using namespace std;
typedef long long ll;
template<typename T>inline T&IN(T&in){
	in=0;char c=getchar();int f=1;
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c))in=in*10+c-'0',c=getchar();
	return in*=f;
}
int n,V;
int l[20][MN],r[20][MN];
int fr[MN],fl[MN],s[MN];ll x[MN];
void input(){
	IN(n),IN(V);
	for(int i=1;i<=n;++i)IN(x[i]);
	int k;x[0]=LLONG_MIN/10,x[n+1]=LLONG_MAX/10;
	for(k=0;V;++k,V>>=1){
		for(int i=1;i<=n;++i)l[k][i]=x[i]-x[i-1]>V?i:l[k][i-1];
		for(int i=n;i>=1;--i)r[k][i]=x[i+1]-x[i]>V?i:r[k][i+1];
	}
	for(int i=1;i<=n;++i)l[k][i]=x[i]-x[i-1]>V?i:l[k][i-1];
	for(int i=n;i>=1;--i)r[k][i]=x[i+1]-x[i]>V?i:r[k][i+1];
	for(int st=0;st<(1<<k);++st){
		fr[st]=n+1;
		for(int i=0;i<k;++i)if(st>>i&1){
			fl[st]=max(fl[st],r[i+1][fl[st^(1<<i)]+1]);
			fr[st]=min(fr[st],l[i+1][fr[st^(1<<i)]-1]);
		}
	}
	for(int st=0;st<(1<<k);++st){
		int L=l[0][fr[((1<<k)-1)^st]-1],R=r[0][fl[st]+1];
		if(L<=R)s[L]++,s[R+1]--;
	}
	for(int i=1;i<=n;++i){
		s[i]+=s[i-1];
		puts(s[i]?"Possible":"Impossible");
	}
}
int main(){
	input();
	return 0;
}