#include <bits/stdc++.h>
const int MN = 300000 + 5;
using namespace std;
template <typename T>
inline T& IN(T& in) {
  in = 0;
  char c = getchar();
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) in = in * 10 + c - '0', c = getchar();
  return in *= f;
}
int n, V;
int l[20][MN], r[20][MN];
int x[MN], fr[MN], fl[MN], s[MN];
void input() {
  IN(n), IN(V);
  for (int i = 1; i <= n; ++i) IN(x[i]);
  int k;
  x[0] = INT_MIN / 10, x[n + 1] = INT_MAX / 10;
  for (k = 0; V; ++k, V >>= 1) {
    for (int i = 1; i <= n; ++i)
      l[k][i] = x[i] - x[i - 1] > V ? i : l[k][i - 1];
    for (int i = n; i >= 1; --i)
      r[k][i] = x[i + 1] - x[i] > V ? i : r[k][i + 1];
    l[k][0] = 1, r[k][n + 1] = n;
  }
  for (int i = 1; i <= n; ++i) l[k][i] = x[i] - x[i - 1] > V ? i : l[k][i - 1];
  for (int i = n; i >= 1; --i) r[k][i] = x[i + 1] - x[i] > V ? i : r[k][i + 1];
  l[k][0] = 1, r[k][n + 1] = n;
  fr[0] = n + 1;
  for (int st = 1; st < (1 << k); ++st) {
    fr[st] = n;
    for (int i = 0; i < k; ++i)
      if (st >> i & 1) {
        fl[st] = max(fl[st], r[i + 1][fl[st ^ (1 << i)] + 1]);
        fr[st] = min(fr[st], l[i + 1][fr[st ^ (1 << i)] - 1]);
      }
  }
  for (int st = 0; st < (1 << k); ++st) {
    int L = l[0][fr[((1 << k) - 1) ^ st] - 1], R = r[0][fl[st] + 1];
    if (L <= R) s[L]++, s[R + 1]--;
  }
  for (int i = 1; i <= n; ++i) {
    s[i] += s[i - 1];
    puts(s[i] ? "Possible" : "Impossible");
  }
}
int main() {
  input();
  return 0;
}
