#include<bits/stdc++.h>
using namespace std;
template <class I>
inline void read(I &x){
    int f=1;
    char c;
    for(c=getchar();c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
    for(x=0;c>='0'&&c<='9';x=(x<<3)+(x<<1)+(c&15),c=getchar());
    x*=f;
}
const int N=270000,LOG=20;
int x[N],v[N],L[LOG][N],R[LOG][N],val[N],Lf[N],Rf[N],n,k,tot;
int main(){
    read(n);
    read(v[0]);
    while(v[k]) v[k+1]=v[k]>>1,k++;
    tot=(1<<k)-1;
    for(int i=1;i<=n;i++)
        read(x[i]);
    for(int i=0;i<=k;i++){
        L[i][1]=1;
        for(int j=2;j<=n;j++) 
            if(x[j]-x[j-1]<=v[i]) 
                L[i][j]=L[i][j-1];
            else L[i][j]=j;
        R[i][n]=n;
        for(int j=n-1;j>=0;j--) 
            if(x[j+1]-x[j]<=v[i]) 
                R[i][j]=R[i][j+1];
            else R[i][j]=j;
    }
    for(int i=1;i<=tot;i++) 
        Lf[i]=1,Rf[i]=n;
    Lf[0]=0,Rf[0]=n+1;
    for(int i=0;i<=tot;i++)
        for(int j=1;j<=k;j++) 
            if(!((i>>(j-1))&1)) {
                Lf[i|(1<<(j-1))]=max(Lf[i|(1<<(j-1))],R[j][Lf[i]+1]);
                Rf[i|(1<<(j-1))]=min(Rf[i|(1<<(j-1))],L[j][Rf[i]-1]);
            }
    for(int i=0;i<=n+1;i++) 
        val[i]=2*n;
    for(int i=0;i<=tot;i++) 
        val[Lf[i]]=min(val[Lf[i]],Rf[tot^i]);
    for(int i=n;i>=0;i--) 
        val[i]=min(val[i],val[i+1]);
    for(int i=1;i<=n;i++) 
        printf(val[L[0][i]-1]<=R[0][i]+1?"Possible\n":"Impossible\n");
    return 0;
}