#include<bits/stdc++.h>
#define Fst first
#define Snd second
#define RG register
#define mp make_pair
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned int UI;
typedef unsigned long long ULL;
template<typename T> inline void read(T& x) {
	char c = getchar();
	bool f = false;
	for (x = 0; !isdigit(c); c = getchar()) {
		if (c == '-') {
			f = true;
		}
	}
	for (; isdigit(c); c = getchar()) {
		x = x * 10 + c - '0';
	}
	if (f) {
		x = -x;
	}
}
template<typename T, typename... U> inline void read(T& x, U& ... y) {
	read(x), read(y...);
}
const int N=2e5+10;
int n,V;
int A[N],L[20][N],R[20][N],Fl[1<<20],Fr[1<<20],G[N];
void Calc(int m,int d) {
  R[m][n]=n;
  for(int i=n-1;i;--i) {
    if(A[i+1]-A[i]<=d) R[m][i]=R[m][i+1];
    else R[m][i]=i;
  }
  L[m][1]=1;
  for(int i=2;i<=n;++i) {
    if(A[i]-A[i-1]<=d) L[m][i]=L[m][i-1];
    else L[m][i]=i;
  }
}
//#define rua
int main() {
//	ios::sync_with_stdio(false);
#ifdef rua
	freopen("GG.in","r",stdin);
#endif
  read(n,V);
  for(int i=1;i<=n;++i) read(A[i]);
  int mlog=0;
  while(V) Calc(mlog++,V),V>>=1;
  Calc(mlog,V);
  Fr[0]=n+1;
  for(int i=1;i<1<<mlog;++i) {
    Fr[i]=n;
    for(int j=0;j<mlog;++j) {
      if(i>>j&1) {
        Fl[i]=max(Fl[i],R[j+1][Fl[i^(1<<j)]+1]);
        Fr[i]=min(Fr[i],L[j+1][Fr[i^(1<<j)]-1]);
      }
    }
  }
  for(int i=0;i<1<<mlog;++i) {
    int l=Fl[i],r=Fr[((1<<mlog)-1)^i];
    int a=L[0][r-1],b=R[0][l+1];
    if(a<=b) ++G[a],--G[b+1];
  }
  for(int i=1;i<=n;++i) {
    G[i]+=G[i-1];
    puts(G[i]?"Possible":"Impossible");
  }
  return 0;
}
