/*              Note        :           helluva implementation.           Link        :                  Boka hoye gelum...   */            #include  bits/stdc++.h        #define sp <<      #define el <<  n    #define S second   #define F first   #define pb push_back   #define all(ar) ar.begin(),ar.end()    #define pii pair<ll,ll>           using namespace std;   using ll = long long;   using ld = long double;       const ll mod = 1000000007;   const ll oo = 3372036000000000;   const ll si = 300005;      vector<pair<pii,char>> vec;    ll ans[si],in[si],n,m;   char dir[si];     bool don[si];       void sm_dir(char q){    stack<pii> od,ev;     for(ll i = q ==  L  ? 0 : n - 1; i < n && i >=  0; q ==  L ? i++ : i--){     if(don[vec[i].F.S] || vec[i].S != q) continue;      pii da,cur = vec[i].F;      if(cur.F & 1){      if(od.empty()){       od.push(cur);        continue;       }      da = od.top(); od.pop();      }else{      if(ev.empty()){       ev.push(cur); continue;       }      da = ev.top(); ev.pop();      }     ll tim = abs(da.F - cur.F)/2;      if(q ==  R ) tim += m - da.F;      else tim += da.F;      don[da.S] = don[cur.S] = 1;      ans[da.S] = ans[cur.S] = tim;     }   }         void baki(){    stack<pii> od,ev;     for(ll i = 0; i < n; i++){     if(don[vec[i].F.S]) continue;      if(vec[i].S ==  L ){      if(vec[i].F.F&1) od.push(vec[i].F);       else ev.push(vec[i].F);      }    }    for(ll i = n-1; i >= 0; i--){     if(don[vec[i].F.S]) continue;      if(vec[i].S ==  R ){      pii cur = vec[i].F,da;       if(cur.F & 1){       if(od.empty()) continue;        da = od.top(); od.pop();       }else{       if(ev.empty()) continue;        da = ev.top(); ev.pop();       }      ll tim = 0;        if(m - cur.F > da.F){       ll wae = m - cur.F,nda = (wae - da.F); // sure?         ll dis = (m - nda)/2;        tim += wae;        tim += dis;       }else{       ll wae = da.F, nda = ((2 * m) - (cur.F + wae))/2;        tim += (wae + nda);       }      ans[cur.S] = ans[da.S] = tim;     }    }   }         signed main(){       ios_base::sync_with_stdio(false);       cin.tie(NULL);   //*   #ifndef ONLINE_JUDGE       freopen( input.txt , r ,stdin);       freopen( output.txt , w ,stdout);   #endif   //*/       ll t; cin>>t;        while(t--){        vec.clear();        memset(ans,-1,sizeof(ans));        memset(don,0,sizeof(don));           cin>>n>>m;        for(ll i = 0; i < n; i++) cin>>in[i];         for(ll i = 0; i < n; i++) cin>>dir[i];         for(ll i = 0; i < n; i++){         ll x = in[i]; char d = dir[i];          vec.pb({{x,i},d});         }         sort(all(vec));         stack<pii> ev,od;          for(ll i = 0; i < n; i++){         if(vec[i].S ==  R ){          if(vec[i].F.F & 1) od.push(vec[i].F);           else ev.push(vec[i].F);          }else{          pii da,cur = vec[i].F;           if(vec[i].F.F & 1){           if(od.empty()) continue;            da = od.top(); od.pop();           }else{           if(ev.empty()) continue;            da = ev.top(); ev.pop();           }          ll tim = (cur.F - da.F)/2;           don[cur.S] = don[da.S] = 1;           ans[cur.S] = ans[da.S] = tim;          }        }        sm_dir( L );         sm_dir( R );        baki();         for(ll i = 0; i < n; i++) cout<<ans[i] sp; cout el;        }       return 0;   }