#include <bits/stdc++.h>
using namespace std;
const int MN = 200010;
const int ML = 19;
int N, V;
int v[ML];
int x[MN];
int tor[2][ML][MN];
int dp[2][1 << ML];
int imos[MN];
int main() {
  cin >> N >> V;
  int L = 0;
  v[L++] = V;
  while (V > 0) {
    V /= 2;
    v[L++] = V;
  }
  for (int i = 0; i < (N); i++) cin >> x[i];
  for (int tt = 0; tt < (2); tt++) {
    for (int j = 0; j < (L); j++) {
      tor[tt][j][N] = N;
      tor[tt][j][N - 1] = N - 1;
    }
    for (int i = N - 2; i >= 0; --i) {
      for (int j = 0; j < (L); j++) {
        if (x[i + 1] - x[i] <= v[j]) {
          tor[tt][j][i] = tor[tt][j][i + 1];
        } else {
          tor[tt][j][i] = i;
        }
      }
    }
    dp[tt][0] = 0;
    for (int i = 0; i < (1 << L); i++) {
      for (int j = 0; j < (L); j++) {
        if (!((i >> j) & 1)) {
          dp[tt][i | (1 << j)] =
              max(dp[tt][i | (1 << j)], tor[tt][j][dp[tt][i]] + 1);
        }
      }
    }
    reverse(x, x + N);
    for (int i = 0; i < (N); i++) x[i] *= -1;
  }
  int B = (1 << L) - 2;
  for (int i = 0; i < (1 << L); i++) {
    if (i & 1) continue;
    int j = B ^ i;
    int l = dp[0][i], r = N - dp[1][j];
    if (l >= r) {
      puts("wo");
      imos[0]++;
      imos[N]--;
    } else {
      if (tor[0][0][l] + 1 >= r) {
        int p = tor[0][0][l];
        int u = N - 1 - tor[1][0][N - 1 - p];
        imos[u]++;
        imos[p + 1]--;
      }
    }
  }
  for (int i = 0; i < (MN - 1); i++) {
    imos[i + 1] += imos[i];
  }
  for (int i = 0; i < (N); i++) {
    puts(imos[i] > 0 ? "Possible" : "Impossible");
  }
  return 0;
}
