#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
 
const int NMAX = 300000;
const int LOGN = 20;
int V[LOGN];
int Lmost[NMAX][LOGN], Rmost[NMAX][LOGN];
 
int dpL[1<<LOGN], dpR[1<<LOGN];
int arr[NMAX+1];
int dp[NMAX+2];
 
int main(){
    int N; scanf("%d%d",&N,&V[0]);
    for(int i=1;i<=N;i++) scanf("%d",arr+i);
 
    int M = 1;
    while(V[M-1]){
        V[M] = V[M-1]/2;
        M++;
    }
 
    for(int i=0;i<M;i++){
        int v = V[i];
        int j = 1;
        while(j<=N){
            int k = j+1;
            while(k<=N && arr[k]-arr[k-1] <= v) k++;
            for(int x=j;x<k;x++) Rmost[x][i] = k-1;
            j = k;
        }
        j = N;
        while(j>=1){
            int k = j-1;
            while(k>=1 && arr[k+1]-arr[k] <= v) k--;
            for(int x=j;x>k;x--) Lmost[x][i] = k+1;
            j = k;
        }
    }
 
    for(int i=0;i<(1<<M);i++) dpR[i] = N+1;
    for(int i=1;i<(1<<M);i++){
        for(int j=0;j<M;j++) if(i&(1<<j)){
            // use V[j]
            int L = dpL[i^(1<<j)];
            dpL[i] = max(dpL[i], Rmost[L+1][j]);
 
            int R = dpR[i^(1<<j)];
            dpR[i] = min(dpR[i], Lmost[R-1][j]);
        }
    }
 
    for(int i=0;i<=N+1;i++) dp[i] = -0x3fFFffFF;
 
    for(int i=0;i<(1<<M);i+=2){
        int j = ((1<<M)-1)^i^1;
        dp[dpR[j]] = max(dp[dpR[j]], dpL[i]);
    }
 
    for(int i=1;i<=N+1;i++)
        dp[i] = max(dp[i], dp[i-1]);
 
    for(int i=1;i<=N;i++){
        int L = Lmost[i][0], R = Rmost[i][0];
        int det = dp[R+1];
        if(det>=L-1) printf("Possible\n");
        else printf("Impossible\n");
    }
}