#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<queue>
#define LL long long
#define NJ !((i>>(j-1))&1)
#define SJ i^(1<<(j-1))
using namespace std;
inline int read( )
{
  int sum=0;char c=getchar( );bool f=0;
  while(c<'0'||c>'9') {if(c=='-') f=1;c=getchar( );}
  while(c>='0'&&c<='9') {sum=sum*10+c-'0';c=getchar( );}
  if(f) return -sum;
  return sum;
}
const int K=200005;
const int N=25;
const int M=(1<<19)+5;
int n,V,X[K],s[N],f[M],g[M];
int tot,L[K][N],R[K][N],FM[K];
inline void MX(int &x,int y) {if(y>x) x=y;}
inline void MN(int &x,int y) {if(y<x) x=y;}
int main( )
{
  int i,j,x,y,t;
  n=read( );V=read( );
  for(i=1;i<=n;i++) X[i]=read( );
  for(j=V;;j>>=1)
    {
      s[++tot]=j;
      for(i=1,t=1;i<=n;i++)
	{
	  t=max(t,i);
	  while(t<n&&X[t+1]-X[t]<=j) t++;
	  L[i][tot]=t;
	}
      L[n+1][tot]=n;
      for(i=n,t=n;i>=1;i--)
	{
	  t=min(t,i);
	  while(t>1&&X[t]-X[t-1]<=j) t--;
	  R[i][tot]=t;
	}
      R[0][tot]=1;
      if(!j) break;
    }
  int S=1<<tot;
  for(i=0;i<S;i++) g[i]=n+1;
  for(i=0;i<S;i++)
    for(x=f[i],y=g[i],j=1;j<=tot;j++)
      if(NJ) MX(f[SJ],L[x+1][j]),MN(g[SJ],R[y-1][j]);
  int ALL=S-2,MF=-n;
  for(i=0;i<=n+1;i++) FM[i]=-n;
  for(j=1,i=0;i<=ALL;i++) 
    if(NJ) x=(!g[i])?0:((g[i]==n+1)?n+1:g[i]),MX(FM[x],f[ALL-i]);
  for(t=0,i=1;i<=n;i++)
    {
      while(t<=n+1&&L[i][1]+1>=t) MX(MF,FM[t]),t++; 
      puts(R[i][1]<=MF+1?"Possible":"Impossible");
    }
  return 0;
}
  