#include <bits/stdc++.h>
using namespace std;

#define f first
#define s second
#define pb push_back
#define ar array
#define all(x) x.begin(), x.end()
#define siz(x) (int) x.size()
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)

#define FOR(i, a, b) for(int i=(a); i<(b); i++)
#define ROF(i, a, b) for(int i=(b-1); i>=(a); i--)
#define F0R(i, n) FOR(i, 0, n)
#define R0F(i, n) ROF(i, 0, n)
#define trav(x, y) for(auto&x:y)

using ll=long long;
using ld=long double;
using pii=pair<int, int>;
using pll=pair<ll, ll>;
using pli=pair<ll, int>;
using vi=vector<int>;
using vl=vector<ll>;
using vpii=vector<pii>;

template<class T> inline bool ckmin(T&a, const T&b) {return b<a?a=b,1:0;}
template<class T> inline bool ckmax(T&a, const T&b) {return b>a?a=b,1:0;}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const char nl='\n';
const int mxN=2e5+10;
const int MOD=1e9+7;
const ll infLL=1e18;
const ld eps=1e-6;


void solve(){
    int n, m;
    cin >> n >> m;
    vi x(n); 
    vi o, e;
    F0R(i, n){
        cin >> x[i];
        if(x[i]&1) o.pb(i);
        else e.pb(i);
    }
    sort(all(o), [&](int e1, int e2){
        return x[e1]<x[e2];
    });
    sort(all(e), [&](int e1, int e2){
        return x[e1]<x[e2];
    });
    vector<char> ch(n); F0R(i, n) cin >> ch[i];
    vi ans(n, -1);
    auto solve2=[&](vi v){
        vi stk;
        F0R(i, siz(v)){
            if(ch[v[i]]=='L'){
                if(siz(stk)){
                    int k=stk.back(); 
                    stk.pop_back(); 
                    if(ch[k]=='R'){
                        ans[k]=ans[v[i]]=(x[v[i]]-x[k])/2;
                        // cout << x[v[i]] << ' ' << x[k] << nl;
                    }
                    else{
                        ans[k]=ans[v[i]]=(x[v[i]]+x[k])/2;
                        // cout << x[v[i]] << ' ' << x[k] << nl;
                    }
                }
                else{
                    stk.pb(v[i]);
                }
            }
            else{
                stk.pb(v[i]);
            }
        } 
        for(int i=siz(stk)-1; i>=1; i-=2){
            int dist=(m-x[stk[i]]+m-x[stk[i-1]])/2;
            if(ch[stk[i-1]]=='L'){
                dist=(m-x[stk[i]]+m+x[stk[i-1]])/2;
            }
            ans[stk[i]]=ans[stk[i-1]]=dist;
        }
    };
    solve2(o); solve2(e); 
    F0R(i, n) cout << ans[i] << ' ';
    cout << nl;;
}

int32_t main(){
    cin.tie(0)->sync_with_stdio(0);
    int t; cin >> t;
    while(t--){
        solve();
    }
}
