#include <bits/stdc++.h>
using namespace std;
inline int Int() {
  int x;
  scanf("%d", &x);
  return x;
}
inline long long Long() {
  long long x;
  scanf("%lld", &x);
  return x;
}
void err(istream_iterator<string> it) { cout << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << ' ';
  err(++it, args...);
}
const int N = (int)2e5 + 5;
const int maxN = (int)1e6 + 6;
const long long Mod = (long long)1e9 + 7;
const int inf = (int)2e9;
const long long Inf = (long long)1e18;
const int mod = (int)1e9 + 7;
inline int add(int a, int b) {
  a += b;
  return a >= mod ? a - mod : a;
}
inline int sub(int a, int b) {
  a -= b;
  return a < 0 ? a + mod : a;
}
inline int mul(int a, int b) { return (long long)a * b % mod; }
int main() {
  int test = Int(), tc = 0;
  while (test--) {
    string s, t, p;
    cin >> s >> t >> p;
    if ((int)s.size() > (int)t.size()) {
      puts("No");
      continue;
    }
    vector<int> f(28, 0);
    for (int i = 0; p[i]; ++i) {
      f[p[i] - 'a']++;
    }
    int last = -1, j = 0;
    vector<int> pos;
    pos.push_back(-1);
    for (int i = 0; t[i]; ++i) {
      if (s[j] and s[j] == t[i]) {
        pos.push_back(i);
        ++j;
      }
    }
    pos.push_back((int)t.size());
    if (j < (int)s.size()) {
      puts("No");
      continue;
    }
    bool ok = 1;
    for (int i = 0; i < (int)pos.size() - 1; ++i) {
      for (int j = pos[i] + 1; j < pos[i + 1]; ++j) {
        if (!f[t[j] - 'a']) {
          ok = 0;
          break;
        }
        f[t[j] - 'a']--;
      }
    }
    if (ok)
      puts("Yes");
    else
      puts("No");
  }
  return 0;
}
