#include <algorithm>
#include <cstdio>

#define fo(i, a, b) for (i = a; i <= b; i++)
#define fd(i, a, b) for (i = a; i >= b; i--)

using namespace std;

const int maxn = 200000 + 10, lgn = 20;

int f[maxn * 5], g[maxn * 5], mi[maxn], left[maxn][lgn + 10];
int right[maxn][lgn + 10], v[lgn + 10], x[maxn];
int i, j, k, l, r, s, t, n, m, tot, top;

int main() {
  scanf("%d%d", &n, &t);
  fo(i, 1, n) scanf("%d", &x[i]);
  v[0] = t, t /= 2;
  while (t) v[++top] = t, t /= 2;
  v[++top] = 0, reverse(v, v + top + 1);
  fo(j, 0, top) {
    left[1][j] = 1;
    fo(i, 2, n) if (x[i] - x[i - 1] <= v[j]) left[i][j] = left[i - 1][j];
    else left[i][j] = i;
    right[n][j] = n;
    fd(i, n - 1, 1) if (x[i + 1] - x[i] <= v[j]) right[i][j] = right[i + 1][j];
    else right[i][j] = i;
  }
  f[0] = 0, g[0] = n + 1;
  fo(s, 1, (1 << (top + 1)) - 1) {
    f[s] = 0, g[s] = n + 1;
    fo(i, 0, top) if (s & (1 << i)) {
      r = s ^ (1 << i);
      if (f[r] == n)
        f[s] = n;
      else
        f[s] = max(f[s], right[f[r] + 1][i]);
      if (g[r] == 1)
        g[s] = 1;
      else
        g[s] = min(g[s], left[g[r] - 1][i]);
    }
  }
  fo(i, 0, n) mi[i] = n + 2;
  fo(i, 0, (1 << top) - 1) {
    r = ((1 << top) - 1) ^ i;
    mi[f[i]] = min(mi[f[i]], g[r]);
  }
  fd(i, n - 1, 0) mi[i] = min(mi[i], mi[i + 1]);
  fo(i, 1, n) {
    l = left[i][top];
    r = right[i][top];
    if (mi[l - 1] <= r + 1)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
  return 0;
}
