#include <bits/stdc++.h>
using namespace std;
long long n, m, s, d, p[200001], ans[200001];
void printANS(long long x) {
  stack<long long> a;
  while (x != 0) {
    a.push(x);
    x = ans[x];
  }
  cout << "RUN " << p[0] - 1 << '\n';
  x = p[0] - 1;
  while (!a.empty()) {
    cout << "JUMP " << p[a.top() - 1] + 1 - x << '\n';
    if (p[a.top()] - p[a.top() - 1] - 2 > 10E9) {
      if (m - p[a.top() - 1] - 1 >= 1) {
        cout << "RUN " << m - p[a.top() - 1] - 1 << '\n';
      }
    } else {
      cout << "RUN " << p[a.top()] - p[a.top() - 1] - 2 << '\n';
    }
    x = p[a.top()] - 1;
    a.pop();
  }
}
int main() {
  cin >> n >> m >> s >> d;
  for (long long i = 0; i < n; i++) {
    cin >> p[i];
  }
  sort(p, p + n);
  if (p[0] <= s) {
    cout << "IMPOSSIBLE";
    return 0;
  }
  ans[0] = 0;
  p[n] = (10E9) * 2 + 2;
  long long max = 0;
  queue<long long> q;
  q.push(0);
  while (!q.empty()) {
    long long x;
    x = upper_bound(p + max, p + n, p[q.front()] - 1 + d) - p;
    if (p[q.front()] - 1 + d == p[x - 1]) {
      x--;
    }
    for (long long i = max + 1; i <= x; i++) {
      if (p[i] - p[i - 1] > s + 1) {
        q.push(i);
        ans[i] = q.front();
      }
    }
    if (x > max) {
      max = x;
    }
    if (q.front() >= n) {
      printANS(q.front());
      return 0;
    }
    q.pop();
  }
  cout << "IMPOSSIBLE";
  return 0;
}
