#include <bits/stdc++.h>
using namespace std;
const int RLEN = 1 << 18 | 1;
inline char nc() {
  static char ibuf[RLEN], *ib, *ob;
  (ib == ob) && (ob = (ib = ibuf) + fread(ibuf, 1, RLEN, stdin));
  return (ib == ob) ? -1 : *ib++;
}
inline int rd() {
  char ch = nc();
  int i = 0, f = 1;
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = nc();
  }
  while (isdigit(ch)) {
    i = (i << 1) + (i << 3) + ch - '0';
    ch = nc();
  }
  return i * f;
}
const int N = 2e5 + 50;
int n, v, lg, x[N];
int len[20], bin[20];
int mxr[N * 4], mnl[N * 4];
struct BIT_MAX {
  int bit[N];
  inline void inc(int p, int v) {
    for (int i = p; i <= n; i += (i & (-i))) bit[i] = max(bit[i], v);
  }
  inline int ask(int p, int v = 0) {
    for (int i = p; i; i -= (i & (-i))) v = max(v, bit[i]);
    return v;
  }
  inline void init(int lim) {
    for (int l = 1, r; l <= n; l = r + 1) {
      r = l;
      while (r < n && x[r + 1] - x[r] <= lim) ++r;
      inc(l, r);
    }
  }
} bit_max[21];
struct BIT_MIN {
  int bit[N];
  BIT_MIN() {
    for (int i = 0; i < N; i++) bit[i] = 1e9;
  }
  inline void inc(int p, int v) {
    for (int i = p; i; i -= (i & (-i))) bit[i] = min(bit[i], v);
  }
  inline int ask(int p, int v = 1e9) {
    for (int i = p; i <= n; i += (i & (-i))) v = min(v, bit[i]);
    return v;
  }
  inline void init(int lim) {
    for (int l = 1, r; l <= n; l = r + 1) {
      r = l;
      while (r < n && x[r + 1] - x[r] <= lim) ++r;
      inc(r, l);
    }
  }
} bit_min[20];
int ok[N];
int main() {
  n = rd(), v = rd();
  for (int i = 1; i <= n; i++) x[i] = rd();
  for (int t = v;; t /= 2) {
    len[lg++] = t;
    if (!t) break;
  }
  for (int i = 0; i < lg; i++) {
    bin[i] = 1 << i;
    bit_max[i].init(len[i]);
    bit_min[i].init(len[i]);
  }
  mxr[0] = 0;
  mnl[0] = n + 1;
  bin[lg] = 1 << lg;
  for (int s = 1; s < bin[lg]; ++s) {
    if (s & 1) continue;
    int mx = 0, mn = n + 1;
    for (int k = 0; k < lg; ++k)
      if (s & bin[k]) {
        mx = max(mx, bit_max[k].ask(mxr[s ^ bin[k]] + 1));
        mn = min(mn, bit_min[k].ask(mnl[s ^ bin[k]] - 1));
      }
    mxr[s] = mx;
    mnl[s] = mn;
  }
  for (int i = 0; i < bin[lg]; ++i) {
    if (!(i & 1)) {
      int s1 = i, s2 = (bin[lg] - 1) ^ 1 ^ i;
      bit_max[20].inc(mnl[s2], mxr[s1]);
      bit_max[20].inc(mnl[s1], mxr[s2]);
    }
  }
  for (int l = 1, r; l <= n; l = r + 1) {
    r = l;
    while (r < n && x[r + 1] - x[r] <= v) ++r;
    if (bit_max[20].ask(r + 1) >= l - 1)
      for (int i = l; i <= r; i++) ok[i] = 1;
  }
  for (int i = 1; i <= n; i++) puts((ok[i]) ? "Possible" : "Impossible");
}
