#include <bits/stdc++.h>
using namespace std;
const int maxn = 400005;
int f[maxn][20], g[maxn][20], pre[1 << 19], suf[1 << 19];
int x[maxn], ans[maxn], d[20], n, m, v;
int main() {
  scanf("%d%d", &n, &v);
  d[0] = v;
  while (v) d[++m] = v / 2, v /= 2;
  for (int i = (1); i <= (n); ++i) scanf("%d", &x[i]);
  for (int i = (1); i <= (n); ++i)
    for (int j = (0); j <= (m); ++j)
      if (i >= 2 && x[i] - x[i - 1] <= d[j])
        f[i][j] = f[i - 1][j];
      else
        f[i][j] = i;
  for (int i = (n); i >= (1); --i)
    for (int j = (0); j <= (m); ++j)
      if (i <= n - 1 && x[i + 1] - x[i] <= d[j])
        g[i][j] = g[i + 1][j];
      else
        g[i][j] = i;
  memset(pre, 0xc0, sizeof pre);
  memset(suf, 0x3f, sizeof suf);
  pre[0] = 1;
  suf[0] = n;
  int ALL = (1 << m) - 1;
  for (int i = (0); i <= (ALL); ++i)
    for (int j = (0); j <= (m - 1); ++j)
      if (!(i >> j & 1)) {
        if (pre[i] == n)
          pre[i | 1 << j] = n;
        else
          pre[i | 1 << j] = max(pre[i | 1 << j], g[pre[i] + 1][j + 1]);
        if (suf[i] == 1)
          suf[i | 1 << j] = 1;
        else
          suf[i | 1 << j] = min(suf[i | 1 << j], f[suf[i] - 1][j + 1]);
      }
  int l = 1, r, tot = 0, flag;
  while (l <= n) {
    r = l;
    if (tot++ > m) break;
    while (r + 1 <= n && x[r + 1] - x[r] <= d[0]) r++;
    flag = 0;
    for (int i = (0); i <= (ALL); ++i) {
      if (pre[i] >= l - 1 && suf[(~i) & ALL] <= r + 1) {
        flag = 1;
        break;
      }
    }
    for (int i = (l); i <= (r); ++i) ans[i] = flag;
    l = r + 1;
  }
  for (int i = (1); i <= (n); ++i) puts(ans[i] ? "Possible" : "Impossible");
  return 0;
}
