#include <bits/stdc++.h>   using namespace std;   struct ant {     int id;     int novo_id;     long long int p;     int dir;   };   struct rotate_edges {     int id_ini;     int id_fim;   };   int compara_p(ant a, ant b) {     return a.p < b.p || (a.p == b.p && a.dir < b.dir);   }   int compara_p_reverso(ant a, ant b) { return a.p > b.p; }   int compara_id(ant a, ant b) { return a.id < b.id; }   int cont_pos, cont_neg;   long long int N, M, T;   ant v[400000];   ant v_final[400000];   ant v_pos[400000];   ant v_neg[400000];   char c;   rotate_edges calcula_rotate_edges(long long int t, int pivot) {     long long int p_pivot = v[pivot].p;     int cont_neg = 0;     int cont_pos = 0;     for (int i = 0; i < N; i++) {       if (v[i].dir < 0) {         v_neg[cont_neg] = v[i];         if (v_neg[cont_neg].p < p_pivot) v_neg[cont_neg].p += M;         cont_neg++;       } else {         v_pos[cont_pos] = v[i];         if (v_pos[cont_pos].p > p_pivot) v_pos[cont_pos].p -= M;         cont_pos++;       }     }     sort(v_neg, v_neg + cont_neg, compara_p);     sort(v_pos, v_pos + cont_pos, compara_p_reverso);     rotate_edges resp;     if (cont_neg == 0) {       resp.id_ini = v_pos[0].id;       resp.id_fim = v_pos[0].id;     } else if (cont_pos == 0) {       resp.id_ini = v_neg[0].id;       resp.id_fim = v_neg[0].id;     } else {       resp.id_ini = v_pos[0].id;       resp.id_fim = v_pos[0].id;       int id_pos;       int id_neg;       long long int p_pos;       long long int p_neg;       for (int i = 0;; i++) {         id_pos = (i + 1) / 2;         id_neg = i / 2;         p_pos = v_pos[id_pos % cont_pos].p - M * (id_pos / cont_pos);         p_neg = v_neg[id_neg % cont_neg].p + M * (id_neg / cont_neg);         if (p_neg - p_pos <= 2 * t) {           resp.id_fim = (i % 2 == 0) ? v_neg[id_neg % cont_neg].id                                      : v_pos[id_pos % cont_pos].id;         } else {           break;         }       }     }     return resp;   }   long long int calcula_delta(rotate_edges re) {     int vi_ini, vi_fim;     for (int i = 0; i < N; i++) {       if (v[i].id == re.id_ini) vi_ini = i;       if (v[i].id == re.id_fim) vi_fim = i;     }     return (vi_fim + N - vi_ini) % N;   }   void rotate(long long int delta) {     for (int i = 0; i < N; i++) {       v[i].novo_id = v[(i + N - delta) % N].id;     }     for (int i = 0; i < N; i++) {       v[i].id = v[i].novo_id;     }   }   void rotate_final(rotate_edges re) {     int id, id_final;     for (int i = 0; i < N; i++) {       if (v[i].id == re.id_ini) id = i;       if (v_final[i].id == re.id_fim) id_final = i;     }     for (int i = 0; i < N; i++) {       v_final[(id_final + i) % N].id = v[(id + i) % N].id;     }   }   int main() {     scanf(  %lld %lld %lld , &N, &M, &T);     for (int i = 0; i < N; i++) {       v[i].id = i;       scanf(  %lld %c , &v[i].p, &c);       v[i].p = v[i].p % M;       if (c ==  L ) {         v[i].dir = -1;       } else {         v[i].dir = 1;       }     }     sort(v, v + N, compara_p);     int pivot = 0;     for (int i = 0; i < N; i++) {       if (v[i].dir > 0 && v[(i + 1) % N].dir < 0) {         pivot = i;         break;       }     }     long long int delta_por_ciclo = calcula_delta(calcula_rotate_edges(M, pivot));     rotate((delta_por_ciclo * (T / M)) % N);     T = T % M;     rotate_edges re = calcula_rotate_edges(T, pivot);     for (int i = 0; i < N; i++) {       v_final[i] = v[i];       v_final[i].p = (((v[i].p + v[i].dir * T) % M) + M) % M;     }     sort(v_final, v_final + N, compara_p);     rotate_final(re);     sort(v_final, v_final + N, compara_id);     printf( %d , v_final[0].p == 0 ? M : v_final[0].p);     for (int i = 1; i < N; i++) {       printf(  %d , v_final[i].p == 0 ? M : v_final[i].p);     }     printf(  n );     return 0;   }