#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e6 + 22;
int n, m, s, d;
vector<int> gx;
bool can[MAXN];
void INIT() {
  memset(can, false, sizeof(can));
  sort(gx.begin(), gx.end());
  if (gx[0] > s) can[0] = true;
  for (int i = 1; i < n; i++) {
    if (gx[i] - gx[i - 1] > s + 1) can[i] = true;
  }
}
int find_next(int ind) {
  for (int i = ind + 1; i < n; i++) {
    if (can[i]) return i;
  }
  return n;
}
enum { RUN, JUMP };
vector<pair<int, int> > ans;
inline int len(int a, int b) { return abs(b - a); }
void input() {
  scanf("%d %d %d %d", &n, &m, &s, &d);
  gx.resize(n);
  for (int i = 0; i < n; i++) scanf("%d", &gx[i]);
}
void solve() {
  int pos = 0, pos_to, ind = 0;
  while (ind < n) {
    pos_to = gx[ind] - 1;
    ans.push_back({RUN, len(pos, pos_to)});
    pos = pos_to;
    ind = find_next(ind);
    pos_to = gx[ind - 1] + 1;
    ans.push_back({JUMP, len(pos, pos_to)});
    pos = pos_to;
  }
  if (pos < m) ans.push_back({RUN, len(pos, m)});
}
bool good() {
  for (int i = 0; i < (int)ans.size(); i++) {
    if (ans[i].first == JUMP && (ans[i - 1].second < s || ans[i].second > d))
      return false;
  }
  return true;
}
void outAnswer() {
  for (int i = 0; i < (int)ans.size(); i++) {
    if (ans[i].first == RUN)
      printf("RUN %d\n", ans[i].second);
    else
      printf("JUMP %d\n", ans[i].second);
  }
}
void cry() {
  cout << "IMPOSSIBLE";
  exit(0);
}
int main() {
  input();
  INIT();
  solve();
  if (good())
    outAnswer();
  else
    cry();
  return 0;
}
