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

#define mod 1'000'000'007
using ll = long long;

template<typename T>
void deb(initializer_list<T> l)
{
	for (auto &e : l)
		cout << e << ' ';
	cout << endl;
}

ll n, m;
vector<ll> tim;

void solve(vector<tuple<ll, char, int>>& a)
{
	deque<tuple<ll, char, int>> s;
	for (auto& [val, dir, idx] : a)
	{
		if (dir == 'R')
			s.emplace_back(val, dir, idx);
		else if (s.empty() || get<1>(s.back()) == 'L')
			s.emplace_back(val, dir, idx);
		else
		{
			auto [valR, dirR, idxR] = s.back();
			s.pop_back();
			tim[idx] = tim[idxR] = abs(val - valR) / 2;
		}
	}

	while (true)
	{
		if (s.empty())
			break;

		auto [val, dir, idx] = s.front();
		if (dir == 'R')
			break;
		if ((int) s.size() == 1)
			return;

		s.pop_front();
		auto [val2, dir2, idx2] = s.front();
		if (dir2 == 'R')
		{
			s.emplace_front(val, dir, idx);
			break;
		}

		s.pop_front();
		tim[idx] = tim[idx2] = val + abs(val - val2) / 2;
	}

	while (true)
	{
		if (s.empty())
			break;

		auto [val, dir, idx] = s.back();
		if (dir == 'L' || (int) s.size() == 1)
			return;

		s.pop_back();
		auto [val2, dir2, idx2] = s.back();
		if (dir2 == 'R')
		{
			s.pop_back();
			tim[idx] = tim[idx2] = m - val + abs(val - val2) / 2;
		}
		else
		{
			tim[idx] = tim[idx2] = (val2 + m - val + m) / 2;
			return;
		}
	}
}

void solve()
{
	cin >> n >> m;
	vector<tuple<ll, char, int>> a(n);
	for (auto& e : a)
		cin >> get<0>(e);
	for (auto& e : a)
		cin >> get<1>(e);
	for (int i = 0; i < n; ++i)
		get<2>(a[i]) = i;

	sort(a.begin(), a.end());
	vector<tuple<ll, char, int>> odd, even;
	for (auto& [val, dir, idx] : a)
	{
		if (val % 2 == 1)
			odd.emplace_back(val, dir, idx);
		else
			even.emplace_back(val, dir, idx);
	}

	tim.assign(n, -1);
	solve(odd);
	solve(even);

	for (auto& e : tim)
		cout << e << ' ';
	cout << '\n';
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);

	int t = 1;
	cin >> t;
	while (t--)
		solve();

	return 0;
}
