#include <bits/stdc++.h>
using namespace std;
int n, k, v[20], x[200005];
int l[20][200005], r[20][200005];
int lft[200005], rit[200005], opt[200005];
template <typename T>
void read(T &x) {
  x = 0;
  int f = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -f;
  for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
  x *= f;
}
int main() {
  read(n), read(v[0]);
  for (int i = 1; i <= n; i++) read(x[i]);
  for (k = 1; v[k - 1] != 0; k++) v[k] = v[k - 1] / 2;
  k -= 1;
  int goal = (1 << k) - 1;
  for (int j = 0; j <= k; j++) {
    l[j][1] = 1;
    for (int i = 2; i <= n; i++)
      if (x[i] - x[i - 1] <= v[j])
        l[j][i] = l[j][i - 1];
      else
        l[j][i] = i;
  }
  for (int j = 0; j <= k; j++) {
    r[j][n] = n;
    for (int i = n - 1; i >= 1; i--)
      if (x[i + 1] - x[i] <= v[j])
        r[j][i] = r[j][i + 1];
      else
        r[j][i] = i;
  }
  for (int curr = 0; curr <= goal; curr++) {
    lft[curr] = 0;
    rit[curr] = n + 1;
  }
  for (int curr = 0; curr < goal; curr++)
    for (int i = 1, j = 1; i <= k; i++, j <<= 1) {
      if (curr & j) continue;
      int dest = curr | j;
      lft[dest] = max(lft[dest], min(r[i][lft[curr] + 1], n));
      rit[dest] = min(rit[dest], max(l[i][rit[curr] - 1], 1));
    }
  for (int i = 0; i <= n; i++) opt[i] = n + 2;
  for (int curr = 0; curr <= goal; curr++)
    opt[lft[curr]] = min(rit[goal ^ curr], opt[lft[curr]]);
  for (int i = n - 1; i >= 0; i--) opt[i] = min(opt[i], opt[i + 1]);
  for (int i = 1; i <= n; i++) {
    int lft = l[0][i];
    int rit = r[0][i];
    if (opt[lft - 1] <= rit + 1)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
  return 0;
}
