#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 10, lgn = 20;
int f[maxn * 2], g[maxn * 2], mi[maxn], left[maxn][lgn + 10],
    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);
  for (i = 1; i <= n; i++) scanf("%d", &x[i]);
  v[0] = t;
  t /= 2;
  while (t) {
    v[++top] = t;
    t /= 2;
  }
  v[++top] = 0;
  reverse(v, v + top + 1);
  for (j = 0; j <= top; j++) {
    left[1][j] = 1;
    for (i = 2; i <= n; i++)
      if (x[i] - x[i - 1] <= v[j])
        left[i][j] = left[i - 1][j];
      else
        left[i][j] = i;
    right[n][j] = n;
    for (i = n - 1; i >= 1; i--)
      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;
  for (s = 1; s <= (1 << (top + 1)) - 1; s++) {
    f[s] = 0;
    g[s] = n + 1;
    for (i = 0; i <= top; i++)
      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]);
      }
  }
  for (i = 0; i <= n; i++) mi[i] = n + 2;
  for (i = 0; i <= (1 << top) - 1; i++) {
    r = ((1 << top) - 1) ^ i;
    mi[f[i]] = min(mi[f[i]], g[r]);
  }
  for (i = n - 1; i >= 0; i--) mi[i] = min(mi[i], mi[i + 1]);
  for (i = 1; i <= n; i++) {
    l = left[i][top];
    r = right[i][top];
    if (mi[l - 1] <= r + 1)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
}
