#include <bits/stdc++.h>
using namespace std;
int f[820000][32], g[820000][32];
int tot, sum[820000], n, v, a[820000], b[820000];
int l[820000], r[820000];
int check(int x, int y) {
  x++;
  if (f[x][tot] < y - 1) return 0;
  y = f[x][tot];
  x = g[y][tot];
  sum[x]++;
  sum[y + 1]--;
}
int cal() {
  memset(r, 0x7f, sizeof(r));
  memset(l, 0, sizeof(l));
  r[0] = n;
  for (int i = 0; i < 1 << tot; i++) {
    for (int j = 1; j <= tot; j++) {
      if (i & (1 << (j - 1))) continue;
      l[i | (1 << (j - 1))] = max(l[i | (1 << (j - 1))], f[l[i] + 1][j]);
      r[i | (1 << (j - 1))] = min(r[i | (1 << (j - 1))], g[r[i] - 1][j]);
      if (l[i] == n) l[i | (1 << (j - 1))] = n;
      if (r[i] == 1) r[i | (1 << (j - 1))] = 1;
    }
  }
  int o = (1 << (tot - 1)) - 1;
  for (int i = 0; i <= o; i++) {
    check(l[i], r[o ^ i]);
  }
  for (int i = 0; i <= n; i++) sum[i] += sum[i - 1];
}
int main() {
  scanf("%d%d", &n, &v);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  while (v) b[++tot] = v, v /= 2;
  b[++tot] = v;
  sort(b + 1, b + 1 + tot);
  for (int i = 1; i <= tot; i++) f[n][i] = n;
  for (int i = n - 1; i >= 1; i--) {
    for (int j = 1; j <= tot; j++) {
      if (a[i + 1] - a[i] <= b[j])
        f[i][j] = f[i + 1][j];
      else
        f[i][j] = i;
    }
  }
  for (int i = 1; i <= tot; i++) f[n + 1][i] = n;
  for (int i = 1; i <= tot; i++) g[1][i] = 1;
  for (int i = 2; i <= n; i++) {
    for (int j = 1; j <= tot; j++) {
      if (a[i] - a[i - 1] <= b[j])
        g[i][j] = g[i - 1][j];
      else
        g[i][j] = i;
    }
  }
  for (int i = 1; i <= tot; i++) g[0][i] = 1;
  cal();
  for (int i = 1; i <= n; i++) {
    if (sum[i] > 0)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
}
