#include <bits/stdc++.h>
using namespace std;
const int mxN = 2e5 + 5;
const int lgN = 18;
int N, V, X[mxN];
vector<int> S;
int M, dpL[mxN], dpR[mxN], r[lgN][mxN], l[lgN][mxN];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> N >> V;
  for (int i = (1); i <= (N); ++i) {
    cin >> X[i];
  }
  for (int x = V; x; x >>= 1) S.push_back(x);
  S.push_back(0);
  reverse((S).begin(), (S).end());
  M = (int)(S).size();
  for (int i = (0); i <= (M - 1); ++i) {
    r[i][N] = N;
    for (int j = (N - 1); j >= (1); --j) {
      r[i][j] = j;
      if (X[j + 1] - X[j] <= S[i]) r[i][j] = max(r[i][j], r[i][j + 1]);
    }
    l[i][1] = 1;
    for (int j = (2); j <= (N); ++j) {
      l[i][j] = j;
      if (X[j] - X[j - 1] <= S[i]) l[i][j] = min(l[i][j], l[i][j - 1]);
    }
  }
  dpL[0] = 0;
  for (int x = (1); x <= ((1 << (M - 1)) - 1); ++x) {
    dpL[x] = 1;
    int y = x;
    while (y) {
      int b = y & -y, c = __builtin_ctz(b);
      y ^= b;
      dpL[x] = max(dpL[x], r[c][dpL[x ^ b] + 1]);
    }
  }
  dpR[0] = N + 1;
  for (int x = (1); x <= ((1 << (M - 1)) - 1); ++x) {
    dpR[x] = N;
    int y = x;
    while (y) {
      int b = y & -y, c = __builtin_ctz(b);
      y ^= b;
      dpR[x] = min(dpR[x], l[c][dpR[x ^ b] - 1]);
    }
  }
  for (int i = (1); i <= (N); ++i) {
    bool ok = 0;
    for (int x = (0); x <= ((1 << (M - 1)) - 1); ++x) {
      int y = ((1 << (M - 1)) - 1) ^ x;
      int p = dpL[x];
      if (p + 1 >= l[M - 1][i]) p = max(p, r[M - 1][i]);
      if (p + 1 >= dpR[y]) ok = 1;
    }
    cout << (ok ? "Possible" : "Impossible") << '\n';
  }
}
