#include <bits/stdc++.h>
using namespace std;
int read() {
  int v = 0, f = 1;
  char c = getchar();
  while (c < 48 || 57 < c) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (48 <= c && c <= 57) v = (v << 3) + v + v + c - 48, c = getchar();
  return v * f;
}
const int N = 2e5 + 10;
int n, v, m, ans[N];
int a[N], b[N], L[N][22], R[N][22], f[N], g[N];
bool ask(int u) { return ans[L[u][0] - 1] <= R[u][0] + 1; }
int main() {
  n = read(), v = read();
  for (int i = 1; i <= n; i++) a[i] = read();
  b[0] = v;
  for (int i = 1; i <= 50; i++) b[i] = b[i - 1] >> 1;
  for (int i = 0; b[i]; i++) m = i;
  m++;
  for (int i = 0; i <= m; i++)
    for (int j = 1; j <= n;) {
      int k;
      for (k = j + 1; k <= n; k++)
        if (a[k] - a[k - 1] > b[i]) break;
      for (int l = j; l < k; l++) L[l][i] = j, R[l][i] = k - 1;
      j = k;
    }
  for (int i = 0; i < (1 << m); i++) g[i] = n + 1;
  for (int i = 0; i < (1 << m); i++)
    for (int j = 0; j < m; j++)
      if (!(i >> j & 1)) {
        f[i | (1 << j)] = max(f[i | (1 << j)], R[f[i] + 1][j + 1]);
        g[i | (1 << j)] = min(g[i | (1 << j)], L[g[i] - 1][j + 1]);
      }
  for (int i = 0; i <= n; i++) ans[i] = 2e9;
  for (int i = 0; i < (1 << m); i++)
    ans[f[i]] = min(ans[f[i]], g[((1 << m) - 1) ^ i]);
  for (int i = n - 1; i >= 1; i--) ans[i] = min(ans[i], ans[i + 1]);
  for (int i = 1; i <= n; i++) puts(ask(i) ? "Possible" : "Impossible");
}
