#include <bits/stdc++.h>
using std::pair;
const int N = 200010;
const int M = 18;
int _w;
int max(int a, int b) { return a > b ? a : b; }
int n, v, x[N], m;
int ans[N];
void answer() {
  for (int i = 1; i <= n; ++i) puts(ans[i] ? "Possible" : "Impossible");
  exit(0);
}
int R[M][N];
void prelude() {
  int t = v;
  for (m = 0;; ++m, t >>= 1) {
    R[m][n] = R[m][n + 1] = n;
    for (int j = n - 1; j >= 1; --j)
      if (x[j + 1] - x[j] > t)
        R[m][j] = j;
      else
        R[m][j] = R[m][j + 1];
    if (!t) break;
  }
  ++m;
}
int f[1 << M];
bool check(int l, int r) {
  if (l == 1 && r == n) return true;
  memset(f, 0, sizeof f);
  for (int i = 0; i < (1 << m); ++i)
    for (int j = 1; j < m; ++j)
      if ((i & (1 << j)) == 0) {
        int k = i | (1 << j);
        f[k] = max(f[k], R[j][f[i] + 1]);
        if (f[k] >= l - 1 && f[k] <= r) f[k] = r;
      }
  return f[(1 << m) - 2] == n;
}
void solve() {
  static pair<int, int> tmp[N];
  static int tn;
  for (int i = 1; i <= n; i = R[0][i] + 1)
    tmp[tn++] = pair<int, int>(i, R[0][i]);
  if (tn > m) answer();
  for (int i = 0; i < tn; ++i)
    if (check(tmp[i].first, tmp[i].second)) {
      for (int j = tmp[i].first; j <= tmp[i].second; ++j) ans[j] = 1;
    }
  answer();
}
int main() {
  _w = scanf("%d%d", &n, &v);
  for (int i = 1; i <= n; ++i) _w = scanf("%d", x + i);
  prelude(), solve();
  return 0;
}
