#include <bits/stdc++.h>
using namespace std;
bool mark[201000];
int n, V, x[201000], v[20], pre[201000][20], suc[201000][20], l, f[301000],
    g[301000];
int main() {
  scanf("%d%d", &n, &V);
  for (; V > 0; V = V / 2) v[l++] = V;
  v[l++] = 0;
  for (int i = 1; i <= n; ++i) scanf("%d", &x[i]);
  for (int i = 0; i < l; ++i) suc[n][i] = n, pre[1][i] = 1;
  for (int i = 2; i <= n; ++i)
    for (int k = 0; k < l; ++k)
      pre[i][k] = (x[i] - x[i - 1] <= v[k] ? pre[i - 1][k] : i);
  for (int i = n - 1; i >= 1; --i)
    for (int k = 0; k < l; ++k)
      suc[i][k] = (x[i + 1] - x[i] <= v[k] ? suc[i + 1][k] : i);
  int M = 1 << l;
  for (int s = 0; s < M; ++s) g[s] = n + 1;
  for (int s = 0; s < M; ++s) {
    for (int i = 0; i < l; ++i)
      if (!(s >> i & 1)) {
        f[s ^ (1 << i)] =
            max(f[s ^ (1 << i)], f[s] == n ? n : suc[f[s] + 1][i]);
        g[s ^ (1 << i)] =
            min(g[s ^ (1 << i)], g[s] == 1 ? 1 : pre[g[s] - 1][i]);
      }
  }
  bool all = false;
  for (int s = 0; s < M; ++s)
    if (!(s & 1)) {
      int t = M - 1 - s - 1;
      int l = f[s], r = g[t];
      if (l > r)
        all = true;
      else if (suc[l + 1][0] >= r - 1)
        mark[l + 1] = true;
    }
  if (all)
    for (int i = 1; i <= n; ++i) mark[i] = true;
  int r = 0;
  for (int i = 1; i <= n; ++i) {
    if (mark[i]) r = suc[i][0];
    puts(i <= r ? "Possible" : "Impossible");
  }
  return 0;
}
