#include <bits/stdc++.h>
using namespace std;
namespace io {
const int L = (1 << 19) + 1;
char ibuf[L], *iS, *iT, c;
int f;
char gc() {
  if (iS == iT) {
    iT = (iS = ibuf) + fread(ibuf, 1, L, stdin);
    return iS == iT ? EOF : *iS++;
  }
  return *iS++;
}
template <class I>
void gi(I& x) {
  for (f = 1, c = gc(); c < '0' || c > '9'; c = gc())
    if (c == '-') f = -1;
  for (x = 0; c <= '9' && c >= '0'; c = gc()) x = x * 10 + (c & 15);
  x *= f;
}
};  // namespace io
using io::gc;
using io::gi;
int f[200010], s[20], r[20][200010], l[20][200010], x[200010], p[1 << 20],
    q[1 << 20], n, v, d, m, ans[200010];
int main() {
  gi(n);
  gi(v);
  for (register int i = 1; i <= n; i++) gi(x[i]);
  for (register int i = n; i >= 2; i--) x[i] -= x[i - 1];
  x[1] = v + 1;
  x[n + 1] = v + 1;
  for (d = 0; v; d++, v /= 2) {
    for (register int i = n; i >= 1; i--)
      r[d][i] = (x[i + 1] > v) ? i : r[d][i + 1];
    for (register int i = 1; i <= n; i++)
      l[d][i] = (x[i] > v) ? i : l[d][i - 1];
  }
  m = (1 << d) - 1;
  d--;
  for (register int i = 0; i <= m; i++) {
    q[i] = n;
    p[i] = 1;
    for (register int j = 0; j <= d; j++)
      if ((i >> j) & 1) p[i] = max(p[i], r[j][min(n, p[i ^ (1 << j)] + 1)]);
    for (register int j = 0; j <= d; j++)
      if ((i >> j) & 1) q[i] = min(q[i], l[j][max(1, q[i ^ (1 << j)] - 1)]);
  }
  m--;
  for (register int i = 1; i <= n; i++)
    if (l[0][i] == i) {
      for (int j = m; j; j = m & (j - 1))
        if (p[j] >= i - 1 && q[m ^ j] <= r[0][i] + 1) ans[i] = 1;
      if (p[0] >= i - 1 && q[m] <= r[0][i] + 1) ans[i] = 1;
    } else
      ans[i] = ans[l[0][i]];
  for (register int i = 1; i <= n; i++)
    puts(ans[i] ? "Possible" : "Impossible");
  return 0;
}
