#include <bits/stdc++.h>
#pragma comment(linker, "/stack:16777216")
using namespace std;
const int INF = 1000000000;
const int MAX = 500000;
const int MAX2 = 7000;
const int BASE = 1000000000;
int n, m, s, d;
int A[MAX];
int P[MAX];
int R[MAX];
int main() {
  scanf("%d %d %d %d", &n, &m, &s, &d);
  for (int i = (0); i < (n); ++i) {
    scanf("%d", &A[i]);
  }
  sort(A, A + n);
  vector<pair<int, int> > Q;
  Q.push_back(make_pair(0, A[0] - 1));
  for (int i = (1); i < (n); ++i)
    if (A[i] != A[i - 1] + 1) Q.push_back(make_pair(A[i - 1] + 1, A[i] - 1));
  Q.push_back(make_pair(A[n - 1] + 1, m));
  memset(P, -1, sizeof(P));
  int pos = 0, id = -1;
  for (int i = (0); i < ((int)Q.size()); ++i) {
    if (Q[i].first <= pos) {
      R[i] = 1;
      P[i] = id;
    }
    if (R[i] && Q[i].second - Q[i].first >= s) {
      pos = Q[i].second + d;
      id = i;
    }
  }
  if (R[(int)Q.size() - 1] == 0) {
    printf("IMPOSSIBLE\n");
    return 0;
  }
  vector<int> I;
  int x = (int)Q.size() - 1;
  while (x != -1) {
    I.push_back(x);
    x = P[x];
  }
  reverse(I.begin(), I.end());
  for (int i = (0); i < ((int)I.size()); ++i) {
    if (Q[I[i]].first != Q[I[i]].second)
      printf("RUN %d\n", Q[I[i]].second - Q[I[i]].first);
    if (i != (int)I.size() - 1)
      printf("JUMP %d\n", Q[I[i + 1]].first - Q[I[i]].second);
  }
  return 0;
}
