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


void solve()
{
int n,m;
    cin>>n>>m;
int ans[n];
    for(int i = 0;i<n;i++)
        ans[i] = -1;
    int dir[n];
int arr[n];
set<pair<int,int>>odd,even;    
for(int i = 0;i<n;i++)
{
    cin>>arr[i];
}
    
for(int i = 0;i<n;i++)
{
    char ch;cin>>ch;
    dir[i] = ch=='L'?0:1;
}
vector<pair<int,pair<int,int>>>arr2;
for(int i = 0;i<n;i++)
{
    arr2.push_back({arr[i],{dir[i],i}});
}
    sort(arr2.begin(),arr2.end());
    map<int,int>mp;
    for(int i = 0;i<n;i++)
    {
        mp[i] = arr2[i].second.second;
        arr[i] = arr2[i].first;
        dir[i] = arr2[i].second.first;
    }    
    
stack<int>ste,sto;
for(int i = 0;i<n;i++)
{
    if(arr[i]%2==0)
    {
        if(ste.size()!=0 && dir[ste.top()] == 1 && dir[i] == 0)
        {
            ans[i] = abs(arr[ste.top()] - arr[i])/2;
            ans[ste.top()]  = ans[i];
            ste.pop();
        }
        else
        {
            ste.push(i);
        }
    }
    else
    {
         if(sto.size()!=0 && dir[sto.top()] == 1 && dir[i] == 0)
        {
            ans[i] = abs(arr[sto.top()] - arr[i])/2;
            ans[sto.top()]  = ans[i];
            sto.pop();
        }
        else
        {
            sto.push(i);
        }
    }
    
}
    set<int>a1,o1;
    set<int, greater<int>>a2,o2;
    while(ste.size()>0)
    {
        if(dir[ste.top()]>0)
            a2.insert(ste.top());
        else
            a1.insert(ste.top());    
        ste.pop();
    }
    while(sto.size()>0)
    {
        if(dir[sto.top()]>0)
            o2.insert(sto.top());
        else
            o1.insert(sto.top());    
        sto.pop();
    }
    while(a1.size()>1)
    {
        int f1 = *a1.begin();
        a1.erase(a1.begin());
        int f2 = *a1.begin();a1.erase(a1.begin());
        ans[f1] = arr[f1] + (arr[f2]-arr[f1])/2;
        ans[f2] = ans[f1];
    }
    while(a2.size()>1)
    {
        int f1 = *a2.begin();
        a2.erase(a2.begin());
        int f2 = *a2.begin();a2.erase(a2.begin());
        ans[f1] = (m-arr[f1]) + (arr[f1]-arr[f2])/2;
        ans[f2] = ans[f1];
    }
    while(o1.size()>1)
    {
        int f1 = *o1.begin();
        o1.erase(o1.begin());
        int f2 = *o1.begin();o1.erase(o1.begin());
        ans[f1] = arr[f1] + (arr[f2]-arr[f1])/2;
        ans[f2] = ans[f1];
    }
    while(o2.size()>1)
    {
        int f1 = *o2.begin();
        o2.erase(o2.begin());
        int f2 = *o2.begin();o2.erase(o2.begin());
        ans[f1] = (m-arr[f1]) + (arr[f1]-arr[f2])/2;
        ans[f2] = ans[f1];
    }
    if(o1.size()==1 && o2.size()==1)
    {
        int f1 = *o1.begin(),f2 = *o2.begin();
        int k1  = arr[f1];
        int k2 = m-arr[f2];
        if(k1>k2)
        {
            ans[f1] = k1 + (m-(k1-k2))/2;
            ans[f2] = ans[f1];
        }
        else
        {
             ans[f1] = k2 + (m-(k2-k1))/2;
            ans[f2] = ans[f1];
        }
        
    }
    if(a1.size()==1 && a2.size()==1)
    {
        int f1 = *a1.begin(),f2 = *a2.begin();
        int k1  = arr[f1];
        int k2 = m-arr[f2];
        if(k1>k2)
        {
            ans[f1] = k1 + (m-(k1-k2))/2;
            ans[f2] = ans[f1];
        }
        else
        {
             ans[f1] = k2 + (m-(k2-k1))/2;
            ans[f2] = ans[f1];
        }
        
    }
    int ansf[n];
    for(int i = 0;i<n;i++)
    {
        ansf[mp[i]] =ans[i];
    }
    for(int i = 0;i<n;i++)
    {
        cout<<ansf[i]<<" ";
    }
    cout<<endl;
}

signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;cin>>t;
    
while(t--)
	solve();


}