#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.141592653589793;
long long power(long long a, long long b) {
  if (b == 0) return 1;
  long long pp = power(a, b / 2);
  pp = (pp * pp) % 1000000007;
  if (b % 2 == 0) return pp;
  return (pp * a) % 1000000007;
}
int n, v;
long long x[1 << 20];
long long max_lhs[21][200011];
long long max_rhs[21][200011];
vector<long long> water;
long long dp_beg[1 << 20];
long long dp_end[1 << 20];
long long ans[1 << 20];
int main() {
  cin >> n >> v;
  for (int i = 0; i < n; i++) cin >> x[i];
  while (v != 0) {
    water.push_back(v);
    v /= 2;
  }
  water.push_back(0);
  int sz = water.size();
  for (int i = 0; i < sz; i++) {
    long long pani = water[i];
    long long temp = 0;
    for (int j = 0; j < n; j++) {
      if (j == 0) {
        max_lhs[i][j] = 0;
        continue;
      }
      if (x[j] - x[j - 1] > pani) temp = j;
      max_lhs[i][j] = temp;
    }
    temp = n - 1;
    for (int j = n - 1; j >= 0; j--) {
      if (j == n - 1) {
        max_rhs[i][j] = n - 1;
        continue;
      }
      if (x[j + 1] - x[j] > pani) temp = j;
      max_rhs[i][j] = temp;
    }
  }
  for (int mask = 0; mask < 1 << sz; mask++) dp_end[mask] = n - 1;
  for (int mask = 0; mask < 1 << sz; mask++) {
    for (int j = 0; j < sz; j++) {
      if (not(mask & (1 << j))) {
        if (dp_beg[mask | (1 << j)] == n - 1) continue;
        long long pos = dp_beg[mask];
        dp_beg[mask | (1 << j)] =
            max(dp_beg[mask | (1 << j)], max_rhs[j][pos + 1]);
      }
    }
    for (int j = 0; j < sz; j++) {
      if (not(mask & (1 << j))) {
        if (dp_end[mask | (1 << j)] == 0) continue;
        long long pos = dp_end[mask];
        dp_end[mask | (1 << j)] =
            min(dp_end[mask | (1 << j)], max_lhs[j][pos - 1]);
      }
    }
  }
  for (int mask = 0; mask < 1 << sz; mask++) {
    long long s1 = mask | 1;
    long long s2 = s1 ^ ((1 << sz) - 1);
    s1 = s1 ^ 1;
    if (dp_end[s2] - dp_beg[s1] <= 1) {
      ans[0] += 1;
      continue;
    }
    if (max_rhs[0][dp_beg[s1] + 1] >= dp_end[s2] - 1) {
      ans[max_lhs[0][dp_beg[s1] + 1]]++;
      ans[max_rhs[0][dp_beg[s1] + 1] + 1]--;
    }
  }
  long long csum = 0;
  for (int i = 0; i < n; i++) {
    csum += ans[i];
    cout << ((csum != 0) ? "Possible" : "Impossible") << endl;
  }
  return 0;
}
