#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T &x, U y) {
  if (x < y) x = y;
}
static const int dx[] = {0, 0, 1, -1};
static const int dy[] = {-1, 1, 0, 0};
int main() {
  int n, v;
  cin >> n >> v;
  vector<int> x(n);
  vector<int> dis(n + 1);
  for (int i = 0; i < n; i++) {
    cin >> x[i];
    if (i > 0) {
      dis[i] = x[i] - x[i - 1];
    }
  }
  dis[0] = 1 << 30;
  dis[n] = 1 << 30;
  vector<int> vv;
  while (v > 0) {
    vv.push_back(v);
    v /= 2;
  }
  vv.push_back(0);
  vector<vector<bool>> wall(vv.size(), vector<bool>(n + 1, false));
  for (int i = 0; i < vv.size(); i++) {
    for (int j = 0; j < n + 1; j++) {
      if (dis[j] > vv[i]) {
        wall[i][j] = true;
      }
    }
  }
  vector<string> ans;
  int i = 0;
  while (i < n) {
    int cnt = 0;
    vector<bool> done(n);
    for (int u = 0; u < n; u++) {
      done[u] = false;
    }
    while (!wall[0][i + 1]) {
      done[i] = true;
      i++;
      cnt++;
    }
    done[i] = true;
    i++;
    cnt++;
    for (int j = 1; j < vv.size(); j++) {
      int maxd = -1;
      int maxk = -1;
      for (int k = 0; k < n; k++) {
        if (!wall[j][k] && !done[k]) {
          if (maxd < dis[k]) {
            maxd = dis[k];
            maxk = k;
          }
        }
      }
      bool flag = false;
      if (maxk == -1) {
        for (int k = 0; k < n; k++) {
          if (!done[k]) {
            done[k] = true;
            flag = true;
            break;
          }
        }
      }
      if (flag) {
        continue;
      }
      if (!flag && maxk == -1) {
        break;
      }
      int kpf = maxk;
      while (!wall[j][kpf] && kpf < n) {
        done[kpf] = true;
        kpf++;
      }
      int kpb = maxk - 1;
      while (!wall[j][kpb] && kpb > 0) {
        done[kpb] = true;
        kpb--;
      }
      done[kpb] = true;
    }
    bool end = true;
    for (int p = 0; p < n; p++) {
      if (!done[p]) {
        end = false;
      }
    }
    for (int j = 0; j < cnt; j++) {
      if (end) {
        ans.push_back("Possible");
      } else {
        ans.push_back("Impossible");
      }
    }
  }
  for (int z = 0; z < ans.size(); z++) {
    cout << ans[z] << endl;
  }
  return 0;
}
