#include<iostream>
using namespace std;
#include<bits/stdc++.h>
typedef long long int ll;
ll mod=1e9+7;
ll dp[5001][5001];
ll solve(int i,int j,int n){
    if(j==0 || i==1)return 1;
    if(dp[i][j]!=-1)return dp[i][j];
    ll ans=0;
    ans=(solve(i-1,n-j,n)%mod +solve(i,j-1,n)%mod)%mod;
    return dp[i][j]=ans;
}
ll solve(int i,int j,vector<ll>&a,vector<ll>&b){
    if(i==a.size())return 0;
    if(j==b.size())return 1e15;
    if(dp[i][j]!=-1)return dp[i][j];
    ll ansa=abs(a[i]-b[j])+solve(i+1,j+1,a,b);
    ansa=min(ansa,solve(i,j+1,a,b));
    return dp[i][j]=ansa;
}
void dfs(vector<pair<int,pair<int,char>>>vp0,int res[],int m){
    stack<pair<int,pair<int,char>>>sl,sr;
        queue<pair<int,pair<int,char>>>ql,qr;
    for(int i=0;i<vp0.size();i++){
        pair<int,pair<int,char>>p=vp0[i];
        if(p.second.second=='L'){
            if(!sl.empty()){
                pair<int,pair<int,char>>pp=sl.top();
                sl.pop();
                res[p.second.first]=res[pp.second.first]=abs(p.first-pp.first)/2;
            }
            else{
                ql.push(p);
            }
        }
        else sl.push(p);
    }
    while(!sl.empty()){
        pair<int,pair<int,char>>p=sl.top();
        sl.pop();
        if(!sl.empty()){
            pair<int,pair<int,char>>pp=sl.top();
            sl.pop();
            res[p.second.first]=res[pp.second.first]=abs(p.first-pp.first)/2+(m-p.first);
        }
        else {
            sl.push(p);break;
        }
    }
    while(!ql.empty()){
        pair<int,pair<int,char>>p=ql.front();
        ql.pop();
        if(!ql.empty()){
            pair<int,pair<int,char>>pp=ql.front();
            ql.pop();
            res[p.second.first]=res[pp.second.first]=abs(pp.first-p.first)/2+p.first;
        }
        else{
            ql.push(p);break;
        }
    }
    if(ql.size()>0 && sl.size()>0){
        pair<int,pair<int,char>>p=ql.front();
        pair<int,pair<int,char>>pp=sl.top();
        int maxpos=max(p.first,m-pp.first);
        if(p.first>m-pp.first){
            ll reach=2*m-pp.first-p.first;
            res[p.second.first]=res[pp.second.first]=p.first+reach/2;
        }
        else if(p.first<m-pp.first){
            ll reach=(m-pp.first)-p.first;
            res[p.second.first]=res[pp.second.first]=m-pp.first+abs(m-reach)/2;
        }
        else{
            res[p.second.first]=res[pp.second.first]=p.first+m/2;
        }
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int T=1;
    cin>>T;
    while(T--){
        ll n,m;cin>>n>>m;
        ll arr[n];
        for(int i=0;i<n;i++)
        cin>>arr[i];
        char dir[n];
        for(int i=0;i<n;i++)
        cin>>dir[i];
        int res[n];
        for(int i=0;i<n;i++)res[i]=-1;
        vector<pair<int,pair<int,char>>>vp0,vp1;int val=0;
        for(int i=0;i<n;i++){
            if(arr[i]%2==0)
            vp0.push_back({arr[i],{i,dir[i]}});
            else vp1.push_back({arr[i],{i,dir[i]}});
        }
        sort(vp0.begin(),vp0.end());
        sort(vp1.begin(),vp1.end());
        dfs(vp0,res,m);dfs(vp1,res,m);
        for(int i=0;i<n;i++)
        cout<<res[i]<<" ";
        cout<<endl;
    }
}