#include <bits/stdc++.h>

using namespace std;
#define debug(a) for(int i=0;i<a.size();i++) cout<<a[i]<<" "; cout<<"\n";
typedef long long ll;

int main(){
	ios_base::sync_with_stdio(false); cin.tie(nullptr);
	
	//뭐 최소횟수를 구하라는게 아니라 가능/불가능 여부니까 dp는 아니고
	//연산은 
	//1. 인접한 문자간의 교환 가능
	//2.연속된 k개의 같은 문자를 알파벳 상 다음 문자로 교환 가능.
	//연산1에 의해 정렬하고 시작해도 됨
	//비가역성. 알파벳 상 증가만 되지 감소는 안됨
	//그럼 prefixsum만 중요하다?
	//정렬하고 prefixsum of string1 < prefixsum of string2 이면 가능할듯?
	
	//아 근데 k개씩 연속해야 하네..
	//브루트포스로 알파벳 오름차순으로 string1에서 줄이고 string2에서 맞춰나가자. 그래서 되면 되는거고 아니면 안되는거일듯 
	
	int Q; cin>>Q;
	while(Q--){
		int n,k; cin>>n>>k;
		string src,dst; cin>>src>>dst;
		
		vector<int> cnt(26,0),cnt2(26,0);
		for(int i=0;i<n;i++) cnt[src[i]-'a']++,cnt2[dst[i]-'a']++;
		
		//debug(cnt);
		//debug(cnt2);
		
		bool possible=true;
		for(int i=0;i<25;i++){		//'a'~'y'('z'전까지) 
			if(cnt[i]>cnt2[i]){
				int diff= cnt[i]-cnt2[i];
				if(diff%k){		
					possible=false; break;
				}else{
					cnt[i]-=diff;
					cnt[i+1]+=diff;
				}
			}else if(cnt[i]==cnt2[i]){
				continue;
			}else{		//impossible
				possible=false;
				break;
			}
		}
		
		if(cnt['z'-'a']!=cnt2['z'-'a']) possible=false;
		
		if(possible) cout<<"YES\n"; else cout<<"NO\n";
		
	} 
			
}