#include<bits/stdc++.h>
#define N 200005
using namespace std;
int n,v,x[N];
int dp1[(1<<19)+3],dp2[(1<<19)+3];
int tor[20][N],tol[20][N],len[20],dep;
void maxn(int &x,int y){y>x? x=y:0;}
int mxr[N];//左侧覆盖i，右侧最多覆盖多少个城市
int main(){
    scanf("%d%d",&n,&v);x[0]=-2e9,x[n+1]=2e9;
    for(len[0]=v;len[dep]!=0;dep++) len[dep+1]=len[dep]/2;
    dep++;
    for(int i=1;i<=n;i++) scanf("%d",&x[i]);
    for(int d=0;d<dep;d++){
        tol[d][0]=n,tor[d][n+1]=n;
        for(int i=1;i<=n;i++) tol[d][i]=(x[i]-x[i-1]<=len[d])? tol[d][i-1]:n+1-i;
        for(int i=n;i>=1;i--) tor[d][i]=(x[i+1]-x[i]<=len[d])? tor[d][i+1]:i;
    }
    
    for(int i=0;i<(1<<dep);i+=2)
        for(int j=1;j<dep;j++)
            if((i&(1<<j))==0)
                maxn( dp1[i|(1<<j)], tor[j][dp1[i]+1] ),
                maxn( dp2[i|(1<<j)], tol[j][n-dp2[i]] );
    
    memset(mxr,0xc0,sizeof(mxr));
    for(int i=0,j=((1<<dep)-1)^1;j>=0;i+=2,j-=2)
        maxn( mxr[dp1[i]], dp2[j] );
    for(int i=n;i>=1;i--) maxn( mxr[i], mxr[i+1] );
    for(int i=1;i<=n;i++)
        if(mxr[n-tol[0][i]] + tor[0][i] >= n) puts("Possible");
        else puts("Impossible");
    return 0;
}