#include <bits/stdc++.h>
using namespace std;
template <class I>
inline void read(I &x) {
  int f = 1;
  char c;
  for (c = getchar(); c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -1;
  for (x = 0; c >= '0' && c <= '9';
       x = (x << 3) + (x << 1) + (c & 15), c = getchar())
    ;
  x *= f;
}
const int N = 2e5 + 7, LOG = 20;
int x[N], v[N], L[LOG][N], R[LOG][N], val[N], Lf[N], Rf[N], n, k, tot;
int main() {
  read(n);
  read(v[0]);
  while (v[k]) v[k + 1] = v[k] >> 1, k++;
  tot = (1 << k) - 1;
  for (int i = 1; i <= n; i++) read(x[i]);
  for (int i = 0; i <= k; i++) {
    L[i][1] = 1;
    for (int j = 2; j <= n; j++)
      if (x[j] - x[j - 1] <= v[i])
        L[i][j] = L[i][j - 1];
      else
        L[i][j] = j;
    R[i][n] = n;
    for (int j = n - 1; j >= 0; j--)
      if (x[j + 1] - x[j] <= v[i])
        R[i][j] = R[i][j + 1];
      else
        R[i][j] = j;
  }
  for (int i = 1; i <= tot; i++) Lf[i] = 1, Rf[i] = n;
  Lf[0] = 0, Rf[0] = n + 1;
  for (int i = 0; i <= tot; i++)
    for (int j = 1; j <= k; j++)
      if (!((i >> (j - 1)) & 1)) {
        Lf[i | (1 << (j - 1))] = max(Lf[i | (1 << (j - 1))], R[j][Lf[i] + 1]);
        Rf[i | (1 << (j - 1))] = min(Rf[i | (1 << (j - 1))], L[j][Rf[i] - 1]);
      }
  for (int i = 0; i <= n + 1; i++) val[i] = 2 * n;
  for (int i = 0; i <= tot; i++) val[Lf[i]] = min(val[Lf[i]], Rf[tot ^ i]);
  for (int i = n; i >= 0; i--) val[i] = min(val[i], val[i + 1]);
  for (int i = 1; i <= n; i++)
    printf(val[L[0][i] - 1] <= R[0][i] + 1 ? "Possible\n" : "Impossible\n");
  return 0;
}
