#include <bits/stdc++.h>
using namespace std;
int x[252521];
int ne[252521][20], rne[252521][20];
int dp[(1 << 20) + 10], rdp[(1 << 20) + 10];
vector<int> v;
int main() {
  int n, V;
  cin >> n >> V;
  for (int i = 0; i < n; i++) cin >> x[i];
  while (V > 0) {
    v.push_back(V);
    V /= 2;
  }
  v.push_back(0);
  int m = v.size();
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      rne[i][j] = i;
      if (i > 0 && x[i] - x[i - 1] <= v[j]) rne[i][j] = rne[i - 1][j];
    }
  for (int i = n - 1; i >= 0; i--)
    for (int j = 0; j < m; j++) {
      ne[i][j] = i;
      if (i < n - 1 && x[i + 1] - x[i] <= v[j]) ne[i][j] = ne[i + 1][j];
    }
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i < (1 << 20) + 5; i++) rdp[i] = n - 1;
  for (int i = 0; i < (1 << m); i++)
    for (int j = 0; j < m; j++) {
      if ((i & (1 << j)) > 0 || dp[i] >= n || rdp[i] < 0) continue;
      dp[i + (1 << j)] = max(dp[i + (1 << j)], ne[dp[i]][j] + 1);
      rdp[i + (1 << j)] = min(rdp[i + (1 << j)], rne[rdp[i]][j] - 1);
    }
  if (dp[(1 << m) - 1] < n) {
    for (int i = 0; i < n; i++) cout << "Impossible" << endl;
    return 0;
  }
  int now = 0;
  while (now < n) {
    int f = 0;
    for (int i = 0; i < (1 << (m - 1)); i++) {
      if (dp[(1 << m) - 2 - (i << 1)] >= now && rdp[(i << 1)] <= ne[now][0])
        f = 1;
    }
    for (int i = now; i < ne[now][0] + 1; i++) {
      if (f > 0)
        cout << "Possible" << endl;
      else
        cout << "Impossible" << endl;
    }
    now = ne[now][0] + 1;
  }
}
