#include<bits/stdc++.h>
#define int long long
#define pb push_back
#define mp make_pair
#define mod 1000000007
using namespace std;
vector<int> ans;
void solve(vector<pair<int,int>> v,string s,int m) {
	int n=v.size(),i,x,y;
	stack<pair<int,int>> st;
	for(i=0; i<n; i++) {
		x=v[i].first;
		y=v[i].second;
		if(s[y]=='R')
			st.push(mp(x,y));
		else {
			if(!st.empty()) {
				pair<int,int> z=st.top();
				st.pop();
				x=(x-z.first)/2;
				ans[z.second]=x;
				ans[y]=x;
			} else
				st.push(mp((-1)*x,y));
		}
	}
	while(!st.empty()) {
		pair<int,int> x2=st.top();
		st.pop();
		if(!st.empty()) {
			pair<int,int> y2=st.top();
			st.pop();
			x=2*m-x2.first-y2.first;
			x/=2;
			ans[x2.second]=x;
			ans[y2.second]=x;
		} else {
			ans[x2.second]=-1;
		}
	}
}
int32_t main() {
	int t;
	cin>>t;
	for(; t>0; t--) {
		int n,m,i;
		cin>>n>>m;
		vector<pair<int,int>> v(n);
		for(i=0; i<n; i++) {
			cin>>v[i].first;
			v[i].second=i;
		}
		string s,tmp;
		for(i=0; i<n; i++) {
			cin>>tmp;
			s+=tmp;
		}
		sort(v.begin(),v.end());
		vector<pair<int,int>> odd,even;
		for(i=0; i<n; i++) {
			if(v[i].first%2==0)
				even.pb(v[i]);
			else
				odd.pb(v[i]);
		}
		ans.resize(n);
		solve(even,s,m);
		solve(odd,s,m);
		for(i=0; i<n; i++)
			cout<<ans[i]<<" ";
		cout<<"\n";
		ans.clear();
	}
	return 0;
}