#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int INF = 1000 * 1000 * 1000 + 7;
const long long LINF = INF * (long long)INF;
const int L = 20;
const int MAX = 2 * 1000 * 100 + 47;
int V[L];
int sz = 0;
int N[L][MAX];
int P[L][MAX];
int X[MAX];
int dpL[1 << L];
int dpR[1 << L];
int ANS[MAX];
set<pair<int, int> > S;
int M[MAX];
void print(int mask) {
  while (mask) {
    if (mask & 1) {
      cout << 1 << " ";
    } else {
      cout << 0 << " ";
    }
    mask >>= 1;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, v;
  cin >> n >> v;
  for (int i = (0); i < (n); i++) cin >> X[i];
  V[0] = v;
  for (int i = (1); i < (L); i++) {
    V[i] = V[i - 1] / 2;
    if (V[i] == 0) {
      sz = i + 1;
      break;
    }
  }
  reverse(V, V + sz);
  for (int k = (0); k < (L); k++) {
    int v = V[k];
    N[k][n - 1] = n;
    for (int i = (n - 1) - 1; i >= (0); i--) {
      if (abs(X[i + 1] - X[i]) > v) {
        N[k][i] = i + 1;
        continue;
      }
      N[k][i] = N[k][i + 1];
    }
  }
  for (int k = (0); k < (L); k++) {
    int v = V[k];
    P[k][0] = -1;
    for (int i = (1); i < (n); i++) {
      if (abs(X[i] - X[i - 1]) > v) {
        P[k][i] = i - 1;
        continue;
      }
      P[k][i] = P[k][i - 1];
    }
  }
  sz--;
  dpL[0] = 0;
  for (int mask = (0); mask < (1 << sz); mask++) {
    int x = dpL[mask];
    for (int k = (0); k < (sz); k++) {
      if (mask & (1 << k)) continue;
      dpL[mask | (1 << k)] = max(dpL[mask | (1 << k)], N[k][x]);
    }
  }
  for (int i = (0); i < (1 << sz); i++) dpR[i] = n;
  dpR[0] = n - 1;
  for (int mask = (0); mask < (1 << sz); mask++) {
    int x = dpR[mask];
    for (int k = (0); k < (sz); k++) {
      if (mask & (1 << k)) continue;
      dpR[mask | (1 << k)] = min(dpR[mask | (1 << k)], P[k][x]);
    }
  }
  for (int i = (0); i < (n); i++) M[i] = INF;
  for (int maskL = (0); maskL < (1 << sz); maskL++) {
    int maskR = ((1 << sz) - 1) ^ maskL;
    int l = dpL[maskL] - 1;
    int r = dpR[maskR] + 1;
    if (l != -1) M[l] = min(M[l], r);
  }
  for (int i = (n - 1) - 1; i >= (0); i--) M[i] = min(M[i + 1], M[i]);
  for (int i = (0); i < (n); i++) {
    int l = P[sz][i] + 1;
    int r = N[sz][i] - 1;
    if (S.find(make_pair(l, r)) != S.end()) continue;
    if (M[max(l - 1, 0)] <= r + 1) {
      for (int k = (l); k < (r + 1); k++) ANS[k] = 1;
    }
  }
  for (int i = (0); i < (n); i++) {
    if (ANS[i]) {
      cout << "Possible" << endl;
      continue;
    }
    cout << "Impossible" << endl;
  }
}
