#include <bits/stdc++.h>
const int N = 400005;
int f[N], g[N], p[N], L[N], R[N], ans[N];
int left[25][N], righ[25][N];
int n, V, tot;
int read() {
  int x = 0, v = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; v = (ch == '-') ? (-1) : (v), ch = getchar())
    ;
  for (; ch <= '9' && ch >= '0'; x = x * 10 + ch - '0', ch = getchar())
    ;
  return x * v;
}
void pre(int v, int id) {
  for (int i = 1, j; i <= n; i = j + 1) {
    for (j = i; j < n && p[j + 1] - p[j] <= v;) j++;
    for (int k = i; k <= j; ++k) left[id][i] = j, righ[id][j] = i;
  }
}
void solve() {
  for (int i = 0, lim = (1 << tot); i < lim; ++i) {
    g[i] = n + 1;
  }
  for (int i = 0, lim = (1 << tot); i < lim; ++i) {
    for (int j = 0; j <= tot - 1; ++j)
      if ((i >> j) & 1) {
        f[i] = std::max(f[i], left[j][f[i - (1 << j)] + 1]);
        g[i] = std::min(g[i], righ[j][g[i - (1 << j)] - 1]);
      }
  }
  for (int i = 0, lim = (1 << tot); i < lim; ++i) {
    int j = lim - i - 1;
    for (int k = 1; k <= n; ++k)
      if (f[i] + 1 >= L[k] && g[j] <= R[k] + 1) {
        ans[k] = 1;
      }
  }
}
int main(void) {
  memset(righ, 63, sizeof(righ));
  n = read(), V = read();
  for (int i = 1; i <= n; ++i) p[i] = read();
  for (int v = V / 2;; v >>= 1) {
    pre(v, tot++);
    if (!v) break;
  }
  for (int i = 1, j; i <= n; i = j + 1) {
    for (j = i; j < n && p[j + 1] - p[j] <= V;) j++;
    for (int k = i; k <= j; ++k) L[k] = i, R[k] = j;
  }
  solve();
  for (int i = 1; i <= n; ++i)
    if (ans[i])
      puts("Possible");
    else
      puts("Impossible");
  return 0;
}
