#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cassert>
#include<cmath>
using namespace std;
namespace IO
{
    const int __S=(1<<20)+5;char __buf[__S],*__H,*__T;
    inline char getc()
    {
        if(__H==__T) __T=(__H=__buf)+fread(__buf,1,__S,stdin);
        if(__H==__T) return -1;return *__H++;
    }
    template <class __I>inline void read(__I &__x)
    {
        __x=0;int __fg=1;char __c=getc();
        while(!isdigit(__c)&&__c!='-') __c=getc();
        if(__c=='-') __fg=-1,__c=getc();
        while(isdigit(__c)) __x=__x*10+__c-'0',__c=getc();
        __x*=__fg;
    }
    inline void readd(double &__x)
    {
        __x=0;double __fg=1.0;char __c=getc();
        while(!isdigit(__c)&&__c!='-') __c=getc();
        if(__c=='-') __fg=-1.0,__c=getc();
        while(isdigit(__c)) __x=__x*10.0+__c-'0',__c=getc();
        if(__c!='.'){__x=__x*__fg;return;}else while(!isdigit(__c)) __c=getc();
        double __t=1e-1;while(isdigit(__c)) __x=__x+1.0*(__c-'0')*__t,__t=__t*0.1,__c=getc();
        __x=__x*__fg;
    }
    inline void reads(char *__s,int __x)
    {
        char __c=getc();int __tot=__x-1;
        while(__c<'a'||__c>'z') __c=getc();
        while(__c>='a'&&__c<='z') __s[++__tot]=__c,__c=getc();
        __s[++__tot]='\0';
    }
    char __obuf[__S],*__oS=__obuf,*__oT=__oS+__S-1,__c,__qu[55];int __qr;
    inline void flush(){fwrite(__obuf,1,__oS-__obuf,stdout);__oS=__obuf;}
    inline void putc(char __x){*__oS++ =__x;if(__oS==__oT) flush();}
    template <class __I>inline void print(__I __x)
    {
        if(!__x) putc('0');
        if(__x<0) putc('-'),__x=-__x;
        while(__x) __qu[++__qr]=__x%10+'0',__x/=10;
        while(__qr) putc(__qu[__qr--]);
    }
    inline void prints(const char *__s,const int __x)
    {
        int __len=strlen(__s+__x);
        for(int __i=__x;__i<__len+__x;__i++) putc(__s[__i]);
    }
    inline void printd(long double __x,int __d)
    {
        long long __t=(long long)floor(__x);print(__t);putc('.');__x-=(double)__t;
        while(__d--)
        {
            long double __y=__x*10.0;__x*=10.0;
            int __c=(int)floor(__y+1e-9);if(__c==10) __c--;
            putc(__c+'0');__x-=floor(__y);
        }
    }
    inline void el(){putc('\n');}inline void sp(){putc(' ');}
}using namespace IO;

int n,t,v[110],top;
int x[200010],le[20][200010],ri[20][200010],f[1000010],g[1000010];
int ans[1000010];
int main(){
	read(n);read(t);int i,j,s;
	for(i=1;i<=n;i++) read(x[i]);
	v[0]=t;t>>=1;
	while(t){
		v[++top]=t;
		t>>=1;
	}
	v[++top]=0;
	reverse(v,v+top+1);
	for(i=0;i<=top;i++){
		le[i][1]=1;
		for(j=2;j<=n;j++){
			if(x[j]-x[j-1]<=v[i]) le[i][j]=le[i][j-1];
			else le[i][j]=j;
		}
		ri[i][n]=n;
		for(j=n-1;j>=1;j--){
			if(x[j+1]-x[j]<=v[i]) ri[i][j]=ri[i][j+1];
			else ri[i][j]=j;
		}
//		for(j=1;j<=n;j++) cout<<"check "<<i<<' '<<j<<' '<<le[j][i]<<' '<<ri[j][i]<<'\n';
	}
	f[0]=0;g[0]=n+1;
	for(s=1;s<=(1<<(top))-1;s++){
		f[s]=0;g[s]=n+1;
		for(i=0;i<=top;i++){
			if(s&(1<<i)){
				j=s^(1<<i);
				if(f[j]==n) f[s]=n;
				else f[s]=max(f[s],ri[i][f[j]+1]);
				if(g[j]==1) g[s]=1;
				else g[s]=min(g[s],le[i][g[j]-1]);
			}
		}
//		cout<<"dp "<<s<<' '<<f[s]<<' '<<g[s]<<'\n';
	}
	for(i=0;i<=n;i++) ans[i]=n+2;
	for(i=0;i<=((1<<top)-1);i++){
		j=((1<<top)-1)^i;
		ans[f[i]]=min(ans[f[i]],g[j]);
	}
	for(i=n-1;i>=0;i--) ans[i]=min(ans[i],ans[i+1]);
	for(i=1;i<=n;i++){
		if(ans[le[top][i]-1]<=ri[top][i]+1) puts("Possible");
		else puts("Impossible");
	}
}


Measured memory_bytes: 46976