#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define  maxn 300005
#define pb push_back
#define forup(i,a,b) for(int i=(a);i<=(b);i++)  
#define fordown(i,a,b) for(int i=(a);i>=(b);i--)
#define INF 1000000007
int N;
int V[30],Rmost[maxn][30],Lmost[maxn][30];
int dpL[1<<20],dpR[1<<20];
int arr[maxn];
int dp[maxn];
int main()
{  cin>>N; cin>>V[0];
  forup(i,1,N) 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))
         {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]); 
         } 
     } 
    forup(i,0,N+1)  dp[i]=-INF;
    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]);
      }
     forup(i,1,N+1)
      dp[i]=max(dp[i],dp[i-1]);
     forup(i,1,N)
     {int L=Lmost[i][0],R=Rmost[i][0];
      int det=dp[R+1];
      if(det>=L-1)   puts("Possible");
      else           puts("Impossible");
     }  
  return 0;
}