#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
#include <bits/stdc++.h>
#define int long long
#define f2(i, a, b) for (i = a; i < b; i += 2)
#define f(i, a, b) for (i = a; i < b; i++)
#define fr(i, a, b) for (i = a; i >= b; i--)
#define pb push_back
#define vi vector<int>
#define vll vector<long long>
#define vii vector<vector<int>>
#define pi pair<int, int>
#define vpi vector<pi>
#define mint map<int, int>
#define sint set<int>
#define vs vector<string>
#define mp make_pair
#define vc vector<char>
#define rng(x) x.begin(), x.end()
#define rrng(x) x.rbegin(), x.rend()
#define arng(x) x, x + n
#define B(x) x.begin()
#define E(x) x.end()
#define F first
#define S second
#define me max_element
#define endd cout << "\n"
#define ne min_element
using namespace std;

int gcd(int a, int b)
{
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

map<int, bool> m;
void sieve()
{
  m[0] = 1;
  m[1] = 1;
  for (int i = 2; i <= 400; i++)
  {
    if (m[i] == 0)
    {
      for (int j = i + i; j < 1000; j += i)
        m[j] = 1;
    }
  }
}

vector<int> factorise(int p)
{
  int i = 0;
  vector<int> a;
  f(i, 2, 10)
  {
    if (p % i == 0)
      a.push_back(i);
  }
  return a;
}

bool ans(int n)
{
  int x = n;
  while (x != 0)
  {
    int y = x % 10;
    if (y != 0)
    {
      if (n % y != 0)
        return false;
    }
    x /= 10;
  }
  return true;
}

bool isPalindrome(string s, int n)
{
  int i;
  f(i, 0, n / 2)
  {
    if (s[i] != s[n - i - 1])
      return false;
  }
  return true;
}

void solve()
{
  int x, y;
  cin >> x >> y;
  string s;
  cin >> s;
  bool f = 0, ff = 0;
  if(x>0)
  {
    if(count(rng(s),'R')>=abs(x))
      f = true;
  }
  else
  {
    if(count(rng(s),'L')>=abs(x))
      f = 1;
  }
  if(y>0)
  {
    if(count(rng(s),'U')>=abs(y))
      ff = 1;
  }
  else
  {
    if(count(rng(s),'D')>=abs(y))
      ff = 1;
  }
  if(f&&ff)
    cout << "YES";
  else
    cout << "NO";
  endd;
}
int32_t main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

  // sieve();
  int t;
  cin >> t;
  while (t--)
    solve();
  return 0;
}
### Prompt

Your task is to create a cpp solution to the following problem:

You were dreaming that you are traveling to a planet named Planetforces on your personal spaceship. Unfortunately, its piloting system was corrupted and now you need to fix it in order to reach Planetforces.

<image>

Space can be represented as the XY plane. You are starting at point (0, 0), and Planetforces is located in point (p_x, p_y).

The piloting system of your spaceship follows its list of orders which can be represented as a string s. The system reads s from left to right. Suppose you are at point (x, y) and current order is s_i: 

  * if s_i = U, you move to (x, y + 1); 
  * if s_i = D, you move to (x, y - 1); 
  * if s_i = R, you move to (x + 1, y); 
  * if s_i = L, you move to (x - 1, y). 



Since string s could be corrupted, there is a possibility that you won't reach Planetforces in the end. Fortunately, you can delete some orders from s but you can't change their positions.

Can you delete several orders (possibly, zero) from s in such a way, that you'll reach Planetforces after the system processes all orders?

Input

The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases.

Each test case consists of two lines. The first line in each test case contains two integers p_x and p_y (-10^5 ≤ p_x, p_y ≤ 10^5; (p_x, p_y) ≠ (0, 0)) — the coordinates of Planetforces (p_x, p_y).

The second line contains the string s (1 ≤ |s| ≤ 10^5: |s| is the length of string s) — the list of orders.

It is guaranteed that the sum of |s| over all test cases does not exceed 10^5.

Output

For each test case, print "YES" if you can delete several orders (possibly, zero) from s in such a way, that you'll reach Planetforces. Otherwise, print "NO". You can print each letter in any case (upper or lower).

Example

Input


6
10 5
RRRRRRRRRRUUUUU
1 1
UDDDRLLL
-3 -5
LDLDLDDDR
1 2
LLLLUU
3 -2
RDULRLLDR
-1 6
RUDURUUUUR


Output


YES
YES
YES
NO
YES
NO

Note

In the first case, you don't need to modify s, since the given s will bring you to Planetforces.

In the second case, you can delete orders s_2, s_3, s_4, s_6, s_7 and s_8, so s becomes equal to "UR".

In the third test case, you have to delete order s_9, otherwise, you won't finish in the position of Planetforces.

### Response

```cpp
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
#include <bits/stdc++.h>
#define int long long
#define f2(i, a, b) for (i = a; i < b; i += 2)
#define f(i, a, b) for (i = a; i < b; i++)
#define fr(i, a, b) for (i = a; i >= b; i--)
#define pb push_back
#define vi vector<int>
#define vll vector<long long>
#define vii vector<vector<int>>
#define pi pair<int, int>
#define vpi vector<pi>
#define mint map<int, int>
#define sint set<int>
#define vs vector<string>
#define mp make_pair
#define vc vector<char>
#define rng(x) x.begin(), x.end()
#define rrng(x) x.rbegin(), x.rend()
#define arng(x) x, x + n
#define B(x) x.begin()
#define E(x) x.end()
#define F first
#define S second
#define me max_element
#define endd cout << "\n"
#define ne min_element
using namespace std;

int gcd(int a, int b)
{
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

map<int, bool> m;
void sieve()
{
  m[0] = 1;
  m[1] = 1;
  for (int i = 2; i <= 400; i++)
  {
    if (m[i] == 0)
    {
      for (int j = i + i; j < 1000; j += i)
        m[j] = 1;
    }
  }
}

vector<int> factorise(int p)
{
  int i = 0;
  vector<int> a;
  f(i, 2, 10)
  {
    if (p % i == 0)
      a.push_back(i);
  }
  return a;
}

bool ans(int n)
{
  int x = n;
  while (x != 0)
  {
    int y = x % 10;
    if (y != 0)
    {
      if (n % y != 0)
        return false;
    }
    x /= 10;
  }
  return true;
}

bool isPalindrome(string s, int n)
{
  int i;
  f(i, 0, n / 2)
  {
    if (s[i] != s[n - i - 1])
      return false;
  }
  return true;
}

void solve()
{
  int x, y;
  cin >> x >> y;
  string s;
  cin >> s;
  bool f = 0, ff = 0;
  if(x>0)
  {
    if(count(rng(s),'R')>=abs(x))
      f = true;
  }
  else
  {
    if(count(rng(s),'L')>=abs(x))
      f = 1;
  }
  if(y>0)
  {
    if(count(rng(s),'U')>=abs(y))
      ff = 1;
  }
  else
  {
    if(count(rng(s),'D')>=abs(y))
      ff = 1;
  }
  if(f&&ff)
    cout << "YES";
  else
    cout << "NO";
  endd;
}
int32_t main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

  // sieve();
  int t;
  cin >> t;
  while (t--)
    solve();
  return 0;
}
```