#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

const int MAX_N = 200005;

inline void chmax(int &x, int y) {
  if (x < y) x = y;
}

inline void chmin(int &x, int y) {
  if (x > y) x = y;
}

int prefix[1 << 18], suffix[1 << 18], f[MAX_N];
int L[25][MAX_N], R[25][MAX_N], N, V, val[25], tot, X[MAX_N];

void work(int *l, int *r, int v) {
  int last = 1;
  
  l[1] = l[0] = 1;
  for (int i = 2; i <= N; ++i) {
    if (X[i] - X[i - 1] > v) last = i;
    l[i] = last;
  }
  
  last = N, r[N] = r[N + 1] = N;
  for (int i = N - 1; i >= 1; --i) {
    if (X[i + 1] - X[i] > v) last = i;
    r[i] = last;
  }
}

int main() {
  scanf("%d%d", &N, &V);
  
  for (int i = 1; i <= N; ++i)
    scanf("%d", &X[i]);
  
  int temp = V;
  
  while (temp) {
    val[tot++] = temp;
    temp = temp >> 1;
  }
  val[tot++] = 0;
  for (int i = 0; i < tot; ++i) 
    work(L[i], R[i], val[i]);
  
  int S = (1 << tot - 1) - 1;
  for (int i = 1; i <= S; ++i) suffix[i] = N + 1;
  
  prefix[0] = 0, suffix[0] = N + 1;


  for (int mask = 0; mask <= S; ++mask) {
    for (int j = 1; j < tot; ++j)
      if (!(mask & (1 << j - 1))) {
	chmax(prefix[mask | (1 << j - 1)], R[j][prefix[mask] + 1]);
	chmin(suffix[mask | (1 << j - 1)], L[j][suffix[mask] - 1]);
      }
  }

  memset(f, -1, sizeof f);
  for (int mask = 0; mask <= S; ++mask) 
    chmax(f[suffix[mask]], prefix[S ^ mask]);

  for (int i = 1, mx = -1, pos = 1; i <= N; ++i) {
    int l = L[0][i], r = R[0][i];
    while (pos <= r + 1) chmax(mx, f[pos++]);
    if (mx + 1 >= l) puts("Possible");
    else puts("Impossible");
  }
  
  return 0;
}