#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;   }   