#include <bits/stdc++.h>
using namespace std;
#ifdef ONLINE_JUDGE
    #define cerr if(false)cerr
#else
    #define cerr if(true)cerr
#endif
#define prllarr(a,n) for(ll i=0;i<n;i++) cerr<<a[i]<<" "; cerr<<endl;
#define pb push_back
#define ll long long
#define mod 1000000007 
#define foi ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(0);
#define in(n) scanf("%lld",&n);
#define in2(x,y) scanf("%lld %lld",&(x),&(y));
#define in3(x,y,z) scanf("%lld %lld %lld",&(x),&(y),&(z));
#define in4(x,y,z,m) scanf("%lld %lld %lld %lld",&(x),&(y),&(z),&(m));
#define out(n) prllf("%lld\n",n);
#define out2(x,y) prllf("%lld %lld\n",x,y);
#define test(t)  ll t; in(t);while(t--)
// #define set(arr,n,s) for(ll i=0;i<n;i++){arr[i]=s;}
#define fr(i,s,e) for(ll i=s;i<e;i++)
#define frr(i,s,e) for(ll i=e;i>=s;i--)
#define vi vector<ll>
#define see2(x,y) cerr<<x<<" "<<y<<endl;
#define see(x) cerr<<x<<endl;
#define see3(x,y,z) cerr<<x<<" "<<y<<" "<<z<<endl;
#define see4(x,y,z,m) cout<<x<<" "<<y<<" "<<z<<" "<<m<<endl;
#define invec(a,n) fr(i,0,n){ll x;in(x) a.pb(x);}
#define all(a) a.begin(),a.end()

#define debug(...) fprllf(stderr, __VA_ARGS__), fflush(stderr)
           
#define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false); debug("%s time : %.4fs", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC))


// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// template<class T> using ordered_set =tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update> ;
ll power(ll x,ll y,ll p){ll res=1;x=x%p;while(y>0){if(y&1){res=(res*x)%p;} y=y>>1;x=(x*x)%p;}return res;}
ll modInverse(ll a,ll p){return power(a,p-2,p);}//used with feemat little//only for prime
void bin(long n)
{long i;cout << "0";for (i = 1 << 30; i > 0; i = i / 2){if((n & i) != 0){cout << "1";}else{cout << "0";}}}
// void gcd(ll a, ll b, ll& d, ll& u, ll& v) {
//     if (b == 0) {
//         d = a;
//         u = 1;
//         v = 0;
//     } else {
//         gcd(b, a % b, d, v, u);
//         // a u + b v = b u' + (a - (a/b) * b) v'
//         // = a v' + b (u' - (a/b) v').
//         v -= a / b * u;
//     }
// }
// ll Inverse(ll a, ll m) {
//     a %= m;
//     if (a < 0) a += m;
//     ll d, u, v;
//     gcd(a, m, d, u, v);
//     assert(d == 1);
//     u %= m;
//     if (u < 0) u += m;
//     return u;
// } 
 
ll gcd(ll x,ll y){if(x==0 || y==0){return max(y,x);}return gcd(y%x,x);}
// ll gcdExtended(ll a,ll b,ll &x,ll &y){if(a==0){x=0;y=1;return b;}ll x1,y1;ll gcd = gcdExtended(b%a,a,x1,y1);x=y1-(b/a)*x1;y=x1;return gcd;}//o(log(b))
// ;
ll ans[300006];
ll n,m;
vector<pair<pair<ll,ll>,ll>>even[2];
void func(ll parity){
    sort(all(even[parity]));
    vector<pair<pair<ll,ll>,ll>>left[2];
    for(ll i=0;i<even[parity].size();i++){
      
        if(even[parity][i].first.second==1){
            left[1].pb(even[parity][i]);
        }
        else{
            if(left[1].size()!=0){
                ll oo=left[1][left[1].size()-1].first.first;
                ll i1=left[1][left[1].size()-1].second;
                ll i2=even[parity][i].second;
                // auto p=even[parity][i];
                // cout<<p.first.first<<" "<<p.second<<" "<<p.first.second<<endl;
                ll oo2=even[parity][i].first.first;
                ll here=oo2-oo;

                here/=2;
                ans[i1]=here;
                ans[i2]=here;
                left[1].pop_back();
            }
            else{
                left[0].pb(even[parity][i]);
            }
        }

    }

    reverse(all(left[0]));

    ll pppp=left[0].size();
    for(ll i=pppp-1;i>=0;i-=2){
         if(i==0)continue;
      
         ll oo=left[0][i].first.first;
         ll i1=left[0][i].second;
         ll oo1=left[0][i-1].first.first;
         ll i2=left[0][i-1].second;
         ll here=oo + (oo1-oo)/2;
         ans[i1]=here;
         ans[i2]=here;
    }
    
    pppp=left[1].size();
    for(ll i=pppp-1;i>=1;i-=2){
         ll oo=left[1][i].first.first;
         ll i1=left[1][i].second;
         ll oo1=left[1][i-1].first.first;
         ll i2=left[1][i-1].second;
         ll here=m - (oo+oo1)/2;
         ans[i1]=here;
         ans[i2]=here;
    }
    if(left[0].size()%2  &&  left[1].size()%2){
        ll oo=left[1][0].first.first;
         ll i1=left[1][0].second;
         ll oo1=left[0][0].first.first;
         ll i2=left[0][0].second;
         ll here=2*m + (oo1-oo);
         here/=2;

         ans[i1]=here;
         ans[i2]=here;
    }


}
int main(){
    test(t){
        in2(n,m)
        even[0].clear();
        even[1].clear();
        vi a;
        invec(a,n)
        vi b;
        for(ll i=0;i<n;i++){
            char c;
            cin>>c;
            if(c=='R')b.pb(1);
            else b.pb(0);
        }
        for(ll i=0;i<n;i++){
            if(a[i]%2){
                even[0].pb({{a[i],b[i]},i});
            }
            else{
                even[1].pb({{a[i],b[i]},i});
            }

        }
      
        for(ll i=0;i<=n;i++)ans[i]=-1;
        
        func(0);
       
        func(1);
        for(ll i=0;i<n;i++){
            cout<<ans[i]<<' ';
        }
        cout<<endl;




    }    
}


/*error-----
convert every int to long long eg-1LL

check mod also
*/