#include <bits/stdc++.h>
int N, V, LOG, a[200001], LE[18][200001], RE[18][200001], F[262144], G[262144],
    OK[200001];
int main() {
  scanf("%d%d", &N, &V);
  while (1 << LOG <= V) LOG++;
  for (int i = 1; i <= N; i++) scanf("%d", a + i);
  for (int i = 0; i <= LOG; i++) {
    int *le = LE[i], *re = RE[i];
    le[1] = 1;
    for (int j = 2; j <= N; j++)
      le[j] = a[j] - a[j - 1] <= V >> i ? le[j - 1] : j;
    re[N] = N;
    for (int j = N - 1; j; j--)
      re[j] = a[j + 1] - a[j] <= V >> i ? re[j + 1] : j;
  }
  for (int i = 0; i < 1 << LOG; i++) {
    F[i] = 0;
    G[i] = N + 1;
    for (int j = 1; j <= LOG; j++)
      if (i >> j - 1 & 1) {
        F[i] = std::max(F[i], F[i - (1 << j - 1)] == N
                                  ? N
                                  : RE[j][F[i - (1 << j - 1)] + 1]);
        G[i] = std::min(G[i], G[i - (1 << j - 1)] == 1
                                  ? 1
                                  : LE[j][G[i - (1 << j - 1)] - 1]);
      }
  }
  for (int i = 0; i < 1 << LOG; i++)
    if (F[i] + 1 >= G[(1 << LOG) - 1 - i]) {
      for (int j = N; j--;) puts("Possible");
      return 0;
    }
  for (int i = 0; i < 1 << LOG; i++)
    if (RE[0][F[i] + 1] + 1 >= G[(1 << LOG) - 1 - i]) {
      int R = RE[0][F[i] + 1], L = LE[0][R];
      if (!OK[L]) std::fill(OK + L, OK + R + 1, 1);
    }
  for (int i = 1; i <= N; i++) puts(OK[i] ? "Possible" : "Impossible");
  return 0;
}
