#include<bits/stdc++.h>

#define ll long long
#define ull unsigned long long
#define all(A) A.begin(), A.end()
#define pb push_back
#define fri(start , end , step)  for(int i = start; i < end ; i = i + step)
#define frj(start , end , step)  for(int j = start; j < end ; j = j + step)
#define fast ios_base::sync_with_stdio(0); cin.tie(0)
#define debug(x) cerr<<#x<<": "<<x<<endl;

using namespace std; 


//#define int ll

void pv(vector<ll>& vec ){
    fri(0 , vec.size() , 1) cout << vec[i] << " ";
    cout << "\n";
}


signed main(){
	fast;
    int t;
    cin >> t;	
    while(t--){
		int n , m;
		cin >> n >> m;
		vector<array<ll , 3>> A(n);
		vector<bool> B(n);
		fri(0, n ,1) {
			cin >> A[i][0];
			A[i][2] = i;
			}
		fri(0 , n ,1){
			char a;
			cin >> a;
			if(a == 'R') A[i][1] =1; 
			}
			
		
		 sort(all(A));
		 
		 
		 
		 vector<array<ll , 3>> a1 , a0;
		 fri(0 , n ,1) {
			 if(A[i][0] % 2 == 1) a1.pb(A[i]);
			 else a0.pb(A[i]);
			 }
		// cout << "a0" << endl;
		 //for(auto x : a0){
		//	cout << x[0] << " " << x[1] << " "<< x[2] << endl;
		//	}

		
		 vector<ll> ans(n);
		 vector<array<ll , 3>> q;
		 fri(0 , a0.size() ,1){
			
			 if(q.size() == 0) q.pb(a0[i]);
			 else{
				  //cout << q.back()[0] << " " << q.back()[1] << " " << q.back()[2] << endl;
				 if(q.back()[1] == a0[i][1]) q.pb(a0[i]);
				 else
				 {
					 if(q.back()[1] == 1 && a0[i][1] ==0){
						
						 ans[q.back()[2]] = (-q.back()[0] + a0[i][0] )/2;
						 ans[a0[i][2]] = (-q.back()[0] + a0[i][0] )/2;
						 
						 
						 q.pop_back();
						 }
					 else q.pb(a0[i]);
					 }
					
				 
				 }
			 }
			 
		
		int l = -1;
		int r = -1;
		
		
		fri(0 , q.size()/2*2 ,2){
			if(i + 1 < n){
			if(q[i][1] == 0 &&  q[i+ 1][1] == 0){
				ans[q[i][2]] = ans[q[i +1][2]] = q[i][0] + (-q[i][0] + q[i + 1][0] )/2;
				q[i][1] = q[i + 1][1]= 2;
				}
			else break;
		}
			}
		for(int i = q.size()- 1 ; i >= 0 ; i -=2){
			if(i -1 > -1){
			if(q[i][1] == 1 &&  q[i- 1][1] == 1){
				ans[q[i][2]] = ans[q[i - 1][2]] = m - q[i][0] + (q[i][0] - q[i - 1][0] )/2;
				q[i][1] = q[i - 1][1]= 2;
				}
			else break;
				}
			}
		//for(auto x : q ) cout << x[0] << " " << x[1] << " " << x[2] << endl;	
			
		fri(0 , q.size() ,1){
			if(q[i][1] == 0)l = i;
			
			}
		for(int i = q.size() - 1 ; i >=0 ; i --){
			if(q[i][1] == 1)r = i;
			
			}
		
		if(l != -1 && r != -1 ){
			ans[q[l][2]] = ans[q[r][2]] = (m  + (m - q[r][0]) + q[l][0]) /2;
			
			}
			
			
		
		 vector<array<ll , 3>> q1;
		 fri(0 , a1.size() ,1){
			
			 if(q1.size() == 0) q1.pb(a1[i]);
			 else{
				  //cout << q1.back()[0] << " " << q1.back()[1] << " " << q1.back()[2] << endl;
				 if(q1.back()[1] == a1[i][1]) q1.pb(a1[i]);
				 else
				 {
					 if(q1.back()[1] == 1 && a1[i][1] ==0){
						
						 ans[q1.back()[2]] = (-q1.back()[0] + a1[i][0] )/2;
						 ans[a1[i][2]] = (-q1.back()[0] + a1[i][0] )/2;
						 
						 
						 q1.pop_back();
						 }
					 else q1.pb(a1[i]);
					 }
					
				 
				 }
			 }
		
		//debug(q1.size());
		//cout << t << endl;
		l = -1 ;
		r = -1;
		fri(0 , q1.size()/2*2 ,2){
			if(i + 1 < n){
			if(q1[i][1] == 0 &&  q1[i+ 1][1] == 0){
				ans[q1[i][2]] = ans[q1[i +1][2]] = q1[i][0] + (-q1[i][0] + q1[i + 1][0] )/2;
				q1[i][1] = q1[i + 1][1]= 2;
				}
			else break;
		}
			}
		
		for(int i = q1.size()- 1 ; i >= 0 ; i -=2){
			if(i - 1> -1){
			
			if(q1[i][1] == 1 &&  q1[i- 1][1] == 1){
				ans[q1[i][2]] = ans[q1[i - 1][2]] = m - q1[i][0] + (q1[i][0] - q1[i - 1][0] )/2;
				//cout << r << endl;
				q1[i][1] = q1[i - 1][1]= 2;
				}
				
			else break;
			}
			}
		fri(0 , q1.size() ,1){
			if(q1[i][1] == 0)l = i;
			//else break;
			}
		for(int i = q1.size() - 1 ; i >=0 ; i --){
			if(q1[i][1] == 1)r = i;
			//else break;
			}
		
		if(l != -1 && r != -1 ){
			ans[q1[l][2]] = ans[q1[r][2]] = (m  + (m - q1[r][0]) + q1[l][0]) /2;
			
			}
		//cout << endl;
		fri(0 , n ,1){
			if(ans[i] == 0 ) ans[i] = -1;
			}
		pv(ans);
		
		
		

	
    }


    return 0;
}
