#include <bits/stdc++.h>
using namespace std;
struct edge {
  int v;
  long long w;
};
long long _MOD = 1000000009;
double EPS = 1e-10;
int INF = INT_MAX / 2;
struct union_find {
  vector<int> v;
  union_find(int n) : v(n, -1) {}
  int find(int x) { return v[x] < 0 ? x : v[x] = find(v[x]); }
  void unite(int x, int y) {
    x = find(x);
    y = find(y);
    if (x == y) return;
    if (-v[x] < -v[y]) swap(x, y);
    v[x] += v[y];
    v[y] = x;
  }
  bool root(int x) { return v[x] < 0; }
  bool same(int x, int y) { return find(x) == find(y); }
  int size(int x) { return -v[find(x)]; }
};
vector<int> f(int N, int M, vector<int> dx) {
  vector<vector<int> > nxt(N + 1, vector<int>(M));
  for (int j = 0; j < M; j++) nxt[N][j] = nxt[N - 1][j] = N - 1;
  for (int i = N - 2; i >= 0; i--) {
    nxt[i] = nxt[i + 1];
    for (int j = dx[i]; j < M; j++) nxt[i][j] = i + 1;
  }
  vector<int> dp(1 << M);
  for (int S = 0; S < 1 << M; S++)
    for (int j = 0; j < M; j++)
      if (!(S >> j & 1)) {
        int _S = S | 1 << j;
        dp[_S] = max(dp[_S], nxt[dp[S]][j]);
      }
  return dp;
}
vector<int> solve() {
  int N, V;
  cin >> N >> V;
  vector<int> x(N);
  for (int i = 0; i < N; i++) scanf("%d", &x[i]);
  vector<int> dx(N - 1);
  for (int i = 0; i < N - 1; i++) dx[i] = x[i + 1] - x[i];
  vector<int> v;
  for (int _V = V; _V; _V /= 2) v.push_back(_V);
  v.push_back(0);
  int M = v.size();
  for (int i = 0; i < N - 1; i++) {
    int k;
    for (k = 0; dx[i] <= v[k]; k++)
      ;
    dx[i] = k;
  }
  union_find uf(N);
  for (int i = 0; i < N - 1; i++)
    if (dx[i]) uf.unite(i, i + 1);
  vector<int> dp1 = f(N, M, dx);
  reverse(dx.begin(), dx.end());
  vector<int> dp2 = f(N, M, dx);
  vector<bool> ok(N);
  for (int S = 0; S < 1 << (M - 1); S++) {
    int S1 = S << 1, S2 = (((1 << (M - 1)) - 1) - S) << 1;
    int i = min(dp1[S1], N - 1), j = max(0, N - 1 - dp2[S2]);
    if (uf.same(i, j)) ok[uf.find(i)] = true;
  }
  vector<int> ans(N);
  for (int i = 0; i < N; i++) ans[i] = ok[uf.find(i)];
  return ans;
}
int main() {
  vector<int> ans = solve();
  for (int z : ans)
    if (z)
      printf("Possible\n");
    else
      printf("Impossible\n");
}
