#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200010;
const int MAXLG = 20;
int n, maxv, x[MAXN], r[MAXN][MAXLG], l[MAXN][MAXLG];
int dpL[MAXN], dpR[MAXN], p[MAXN];
int main(void) {
  scanf("%d %d", &n, &maxv);
  for (int i = (0); i < (n); ++i) scanf("%d", &x[i]);
  int lg = 0;
  for (int v = maxv; v >= 0; v /= 2, ++lg) {
    for (int i = n - 1; i >= 0; --i) {
      r[i][lg] = i;
      if (i < n - 1 && x[i + 1] - x[i] <= v) r[i][lg] = r[i + 1][lg];
    }
    for (int i = 0; i < n; ++i) {
      l[i][lg] = i;
      if (i > 0 && x[i] - x[i - 1] <= v) l[i][lg] = l[i - 1][lg];
    }
    for (int i = (0); i < (n); ++i)
      ;
    if (v == 0) break;
  }
  for (int mask = (0); mask < ((1 << (lg + 1)) - 1); ++mask) {
    if (mask & 1) continue;
    dpL[mask] = -1;
    dpR[mask] = n;
    for (int j = (0); j < (lg + 1); ++j)
      if (mask & (1 << j)) {
        ;
        if (dpL[mask & ~(1 << j)] == n - 1)
          dpL[mask] = n - 1;
        else
          dpL[mask] = max(dpL[mask], r[dpL[mask & ~(1 << j)] + 1][j]);
        if (dpR[mask & ~(1 << j)] == 0)
          dpR[mask] = 0;
        else
          dpR[mask] = min(dpR[mask], l[dpR[mask & ~(1 << j)] - 1][j]);
      }
  }
  for (int mask1 = (0); mask1 < ((1 << (lg + 1)) - 1); ++mask1) {
    if (mask1 & 1) continue;
    int mask2 = ((1 << (lg + 1)) - 1) ^ mask1;
    if (mask2 & 1) mask2 ^= 1;
    ;
    int lo = dpL[mask1] + 1;
    int hi = dpR[mask2] - 1;
    if (r[lo][0] < hi) continue;
    ++p[lo];
    --p[r[lo][0] + 1];
  }
  int curr = 0;
  for (int i = (0); i < (n); ++i) {
    curr += p[i];
    if (curr > 0)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
  return 0;
}
