#pragma GCC optimize ("Ofast", "unroll-loops", "loop-nest-optimize")

#include <bits/stdc++.h>

#define REP(i, n) REPI(i, 0, n)
#define REP1(i, n) REPI(i, 1, n)
#define REPI(i, init, n) for(int i = init; i < n; i++)
#define MS(arr, val) memset(arr, val, sizeof(arr))
#define SZ(x) (x).size()
#define ALL(x) (x).begin(), (x).end()
#define EB emplace_back
#define UB upper_bound
#define LB lower_bound
#define FS first
#define SC second

#ifdef __WIN32__
inline size_t fread_unlocked(void *_buf, int _sz, int _cnt, FILE *_stream)
{
	return fread(_buf, _sz, _cnt, _stream);
}//fread_unlocked
#endif

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef double DB;
typedef long double LDB;
//typedef pair<int, int> P;

char buf[100000];

inline char gc()
{
	static char *st = buf, *ed = buf;

	if (st >= ed)
	{
		st = buf;
		ed = st + fread_unlocked(buf, 1, sizeof(buf), stdin);

		if (st == ed) return EOF;
	}//if

	return *(st++);
}//gc

template<class T>
inline bool rit(T &_a)
{
	char _c = gc();
	bool neg = false;
	for (; _c < '0' || _c > '9'; _c = gc())
	{
		if (_c == EOF) return false;
		if (_c == '-') neg = true;
	}//for

	for (_a = 0; _c >= '0' && _c <= '9'; _c = gc())
		_a = _a * 10 + _c - '0';

	if (neg) _a = -_a;

	return true;
}//rit

template<class S, class ...T>
inline bool rit(S &_a, T&... _b)
{
	if (!rit(_a)) return false;
	return rit(_b...);
}//rit

//============================================================================//

const int MAX_N = 0 + 10;
//const int INF8 = 0x3f;
//const int INF32 = 0x3f3f3f3f;
//const int MOD = 1e9 + 7;
//const int MOD = 46337; //maximum prime int for multiplying
//const LL MOD = 2999999929; //maximum prime LL for multiplying
//const LL INF64 = 0x3f3f3f3f3f3f3f3f;
//const DB PI = acos(-1);

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t;
	
	cin >> t;
	while (t--)
	{
		int n, k;
		string a, b;
		
		cin >> n >> k >> a >> b;
		
		int cntA[26] = {}, cntB[26] = {};
		
		for (char c : a) cntA[c - 'a']++;
		for (char c : b) cntB[c - 'a']++;
		
		bool flag = true;
		for (int i = 25; i >= 0 && flag; i--)
		{
			if (cntA[i] == cntB[i]) continue;
			else if (cntA[i] > cntB[i] || (cntB[i] - cntA[i]) % k) flag = false;
			else
			{
				for (int j = i - 1; j >= 0; j--)
				{
					int tmp = (cntB[i] - cntA[i]) / k;
				
					if (cntA[j] >= k)
					{
						cntA[i] = min(cntA[i] + cntA[j] / k * k, cntB[i]);
						cntA[j] = max(cntA[j] % k, cntA[j] - k * tmp);
					}//if
				}//for j
				
				if (cntA[i] < cntB[i]) flag = false;
			}//else
		}//for i
		
		if (flag) cout << "YES\n";
		else cout << "NO\n";
	}//while
	
	return 0;
}//main

