#include<cstdio>
#include<algorithm>
#define maxn 200005
#define D 20
#define INF 2147483647
using namespace std;
int n,v,x[maxn],vis[maxn],maxv[maxn],cnt[D],l[D][maxn],r[D][maxn],f1[maxn*5],f2[maxn*5],ans[maxn];
int upfind(int i,int pos)
{
	pos++;
	int p=upper_bound(l[i]+1,l[i]+cnt[i]+1,pos)-l[i]-1;
	if(p<=0) return pos;
	return max(r[i][p],pos-1);
}
int lowfind(int i,int pos)
{
	pos--;
	int p=lower_bound(r[i]+1,r[i]+cnt[i]+1,pos)-r[i];
	if(p>cnt[i]) return pos;
	return min(l[i][p],pos+1);
}
int main()
{
	scanf("%d%d",&n,&v);
	for(int i=1;i<=n;i++) scanf("%d",&x[i]);
	x[0]=-INF,x[n+1]=INF;
	int log2;
	for(log2=0;(1<<log2)<=v;log2++);
	for(int lg=0;lg<=log2;lg++)
	{
		int d=v/(1<<lg);
		cnt[lg]=l[lg][1]=1;
		for(int i=1;i<=n;i++)
		{
			r[lg][cnt[lg]]=i;
			if(x[i+1]-x[i]>d) l[lg][++cnt[lg]]=i+1;
		}
		cnt[lg]--;
	}
	if(cnt[0]>log2+1)
	{
		for(int i=1;i<=n;i++) printf("Impossible\n");
		return 0;
	}
	int S=(1<<(log2+1));
	for(int s=0;s<S;s++) f1[s]=0,f2[s]=INF;
	f2[0]=n+1;
	for(int s=0;s<S;s+=2)
		for(int i=0;i<=log2;i++)
		{
			if(!(s&(1<<i))) continue;
			f1[s]=max(f1[s],upfind(i,f1[s-(1<<i)]));
			f2[s]=min(f2[s],lowfind(i,f2[s-(1<<i)]));
		}
	for(int i=1;i<=cnt[0];i++)
	{
		int ln=l[0][i],rn=r[0][i];
		for(int s1=0;s1<S;s1+=2)
		{
			int s2=S-s1-2;
			int lp=f1[s1],rp=f2[s2];
			if(lp>=ln-1&&rp<=rn+1) { ans[i]=true; break; }
		}
	}
	for(int i=1,pos=1;i<=n;i++)
	{
		printf("%s\n",ans[pos]?"Possible":"Impossible");
		if(x[i+1]-x[i]>v) pos++;
	}
}
