#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10;
int N, V;
int X[MAXN];
int v[MAXN], vn;
int l[19][MAXN], r[19][MAXN];
int f[MAXN], g[MAXN], h[MAXN];
int main() {
  register int s, i, j;
  scanf("%d%d", &N, &V);
  for (i = 1; i <= N; ++i) scanf("%d", X + i);
  v[0] = V;
  V >>= 1;
  while (V) v[++vn] = V, V >>= 1;
  v[++vn] = 0;
  reverse(v, v + vn + 1);
  for (i = 0; i <= vn; ++i) {
    l[i][1] = 1;
    for (j = 2; j <= N; ++j)
      l[i][j] = X[j] - X[j - 1] <= v[i] ? l[i][j - 1] : j;
    r[i][N] = N;
    for (j = N - 1; j; --j) r[i][j] = X[j + 1] - X[j] <= v[i] ? r[i][j + 1] : j;
  }
  f[0] = 0;
  g[0] = N + 1;
  for (s = 1; s <= (1 << (vn + 1)) - 1; ++s) {
    f[s] = 0;
    g[s] = N + 1;
    for (i = 0; i <= vn; ++i)
      if (s & (1 << i)) {
        int x = s ^ (1 << i);
        f[s] = max(f[s], f[x] == N ? N : r[i][f[x] + 1]);
        g[s] = min(g[s], g[x] == 1 ? 1 : l[i][g[x] - 1]);
      }
  }
  for (i = 0; i <= N; ++i) h[i] = N + 2;
  for (i = 0; i <= (1 << vn) - 1; ++i)
    h[f[i]] = min(h[f[i]], g[((1 << vn) - 1) ^ i]);
  for (i = N - 1; i >= 0; --i) h[i] = min(h[i], h[i + 1]);
  for (i = 1; i <= N; ++i)
    puts(h[l[vn][i] - 1] <= r[vn][i] + 1 ? "Possible" : "Impossible");
  return 0;
}
