#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, v, tot, cnt;
int x[N], R[22][N], L[22][N], b[22], id[N], p1[N], p2[N], f[N], g[N], ans[N];
void init() {
  int i, j, k, l;
  memset(L, 0x3f, sizeof(L));
  for (i = 0; i < tot; i++) {
    for (j = 1; j <= n; j = k + 1) {
      k = j;
      while (k < n && x[k + 1] - x[k] <= b[i]) k++;
      for (l = j; l <= k; l++) {
        L[i][l] = j;
        R[i][l] = k;
      }
    }
  }
  for (i = 1; i <= n; i = k + 1) {
    k = i;
    cnt++;
    while (k < n && x[k + 1] - x[k] <= b[tot]) k++;
    for (l = i; l <= k; l++) {
      id[l] = cnt;
      p1[cnt] = i;
      p2[cnt] = k;
    }
  }
}
void work() {
  int i, j, sz, s, ss, l, r;
  sz = (1 << tot) - 1;
  for (i = 0; i <= sz; i++) f[i] = n + 1;
  for (s = 0; s <= sz; s++) {
    for (j = 0; j < tot; j++)
      if (!((s >> j) & 1)) {
        ss = s | (1 << j);
        f[ss] = min(f[ss], L[j][f[s] - 1]);
        g[ss] = max(g[ss], R[j][g[s] + 1]);
      }
  }
  for (s = 0; s <= sz; s++) {
    l = g[s];
    r = f[sz ^ s];
    if (l + 1 >= r) {
      for (i = 1; i <= n; i++) ans[i] = 1;
      return;
    }
    if (p1[id[l + 1]] <= l + 1 && p2[id[l + 1]] >= r - 1) ans[id[l + 1]] = 1;
  }
}
int main() {
  int i;
  scanf("%d%d", &n, &v);
  for (i = 1; i <= n; i++) scanf("%d", &x[i]);
  b[0] = 0;
  while (v) {
    b[++tot] = v;
    v /= 2;
  }
  sort(b, b + tot + 1);
  init();
  work();
  for (i = 1; i <= n; i++)
    if (ans[id[i]])
      printf("Possible\n");
    else
      printf("Impossible\n");
  return 0;
}
