#include <bits/stdc++.h>
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 (!((i >> (j - 1)) & 1))
        MX(f[i ^ (1 << (j - 1))], L[x + 1][j]),
            MN(g[i ^ (1 << (j - 1))], R[y - 1][j]);
  int ALL = S - 2, MF = -n;
  for (i = 0; i < S; i++) FM[i] = -n;
  for (j = 1, i = 0; i <= ALL; i++)
    if (!((i >> (j - 1)) & 1))
      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;
}
