#include <bits/stdc++.h>
using namespace std;
long long n, v;
vector<long long> x;
vector<vector<long long> > dp;
map<array<long long, 3>, long long> memo;
long long dfs(long long k, long long s, long long t) {
  if (memo.find({k, s, t}) != memo.end()) return memo[{k, s, t}];
  if (s == t) {
    return memo[{k, s, t}] = 0;
  }
  if (k >= dp.size()) return memo[{k, s, t}] = 1ll << 60;
  long long ret = 1ll << 60;
  for (long long i = s; i < t; i = dp[k][i] + 1) {
    long long r, l;
    r = dfs(k + 1, s, i);
    l = dfs(k + r + 1, dp[k][i] + 1, t);
    ret = min(ret, r + l);
    l = dfs(k + 1, dp[k][i] + 1, t);
    r = dfs(k + l + 1, s, i);
    ret = min(ret, r + l);
  }
  return memo[{k, s, t}] = ret + 1;
}
void solve() {
  for (long long i = 0, d = v; d; d >>= 1, i++) {
    dp.push_back(vector<long long>(n));
    dp.back()[n - 1] = n - 1;
    for (long long j = n - 1; j > 0; j--)
      dp.back()[j - 1] = (x[j] - x[j - 1] > d ? j - 1 : dp.back()[j]);
  }
  dp.push_back(vector<long long>(n));
  for (long long i = 0; i < n; i++) dp.back()[i] = i;
  dfs(0, 0, n);
  for (long long i = 0; i < n; i = dp[0][i] + 1) {
    if (dfs(1, 0, i) + dfs(1, dp[0][i] + 1, n) <= dp.size()) {
      for (long long j = i; j <= dp[0][i]; j++) cout << "Possible" << endl;
    } else {
      for (long long j = i; j <= dp[0][i]; j++) cout << "Impossible" << endl;
    }
  }
}
void input() {
  cin >> n >> v;
  x = vector<long long>(n);
  for (long long i = 0; i < n; i++) cin >> x[i];
}
int main() {
  input();
  solve();
  return 0;
}
