#include <bits/stdc++.h>
using namespace std;
constexpr int MAX_N = 200000;
int N, M, S, D;
int X[MAX_N + 10];
int DP[MAX_N + 1] = {0};
stack<string> OPS;
void run(int x) {
  if (x == 0) return;
  std::ostringstream os;
  os << "RUN " << x;
  OPS.push(os.str());
}
void jump(int x) {
  assert(x > 0);
  std::ostringstream os;
  os << "JUMP " << x;
  OPS.push(os.str());
}
bool dfs(int p) {
  assert(p >= 0 && p <= N);
  if (DP[p] != 0) {
    assert(DP[p] == 2);
    return false;
  }
  if (M < X[p]) {
    DP[p] = 2;
    return false;
  }
  if (p == N || M < X[p + 1]) {
    run(M - X[p] - 1);
    DP[p] = 1;
  } else {
    DP[p] = 2;
    int space = X[p + 1] - X[p] - 2;
    if (space < S) {
      return false;
    }
    int i = p + 1;
    while (DP[p] != 1 && i <= N && X[i] + 1 <= X[p + 1] - 1 + D) {
      if (dfs(i)) {
        DP[p] = 1;
        jump(X[i] + 1 - X[p + 1] + 1);
        run(space);
      }
      i++;
    }
  }
  return DP[p] == 1;
}
int main() {
  cin >> N >> M >> S >> D;
  X[0] = -1;
  for (int i = 0; i < N; i++) {
    cin >> X[i + 1];
  }
  sort(&X[0], &X[N + 1]);
  if (!dfs(0)) {
    printf("IMPOSSIBLE\n");
  } else {
    while (!OPS.empty()) {
      cout << OPS.top() << endl;
      OPS.pop();
    }
  }
  return 0;
}
