#include <bits/stdc++.h>
#define pb push_back
#define ppb pop_back
#define fr(i,a,b) for(int i = a; i <b; i++)
#define fr1(i,a,b) for(int i = a; i <=b; i++)
#define nl cout<<"\n"
#define vec(n) vector<n>
#define mpp(n,m) map<n,m>
#define all(x) x.begin(),x.end()
#define umpp(n,m) unordered_map<n,m>
using namespace std;
typedef long long int ll;
//ll n;
//string chk(string str1, string str2)
//{
////	cout<<str1<<" k "<<str2<<" lkjq;lgwj\n";
//    // Before proceeding further, make sure length
//    // of str2 is larger.
//    if (str1.length() > str2.length())
//        swap(str1, str2);
// 
//    // Take an empty string for storing result
//    string str = "";
// 
//    // Calculate length of both string
//    int n1 = str1.length(), n2 = str2.length();
// 
//    // Reverse both of strings
//    reverse(str1.begin(), str1.end());
//    reverse(str2.begin(), str2.end());
// 
//    int carry = 0;
//    for (int i = 0; i < n1; i++)
//    {
//        int sum = ((str1[i] - '0') + (str2[i] - '0') + carry);
//        str.push_back(sum % 10 + '0');
// 
//        // Calculate carry for next step
//        carry = sum / 10;
//    }
// 
//    // Add remaining digits of larger number
//    for (int i = n1; i < n2; i++)
//    {
//        int sum = ((str2[i] - '0') + carry);
//        str.push_back(sum % 10 + '0');
//        carry = sum / 10;
//    }
// 
//    // Add remaining carry
//    if (carry)
//        str.push_back(carry + '0');
// 
//    // reverse resultant string
//    reverse(str.begin(), str.end());
//    return str;
//}
// 
// 
// 
//bool comp(string a,string b){
//    if(a.size() == b.size())
//        return a <= b;
//    else
//        return a.size() <= b.size();
//}

bool chk(int x)
{
    return x && (!(x&(x-1)));
}
void remove(vec(int) &lf,vec(int) &rt,vec(int) &right,vec(int) &left)
	{

		int i=0;
		int j=0;
		int l=lf.size();
		int r=rt.size();
		sort(all(lf));
		sort(all(rt));
		while(i<l&&j<r)
		{
			if(lf[i]==rt[j])
			{
				i+=1;
				j+=1;
			}
			else{
				if(lf[i]<rt[j])
					{
						left.pb(lf[i]);
						i+=1;	
					}
					else
					{
						right.pb(rt[j]);
						j+=1;
					}
				}
			}
			while(j<r){
				right.pb(rt[j]);
				j+=1;
			}
			while(i<l) {
				left.pb(lf[i]);
				i+=1;
			}
		}
int main()
	{
		ll t;
		scanf("%lld",&t);
		while(t--)
		{
			int n,l,r;
			cin>>n>>l>>r;
			vec(int) lf(l),rt(r),left,right,ll,rr;
			mpp(int,int) mp,mp1,mp2;
			fr(i,0,l)
			{
				cin>>lf[i];
			}
			fr(i,0,r)
			{
				cin>>rt[i];
			}
			sort(all(lf));
			sort(all(rt));
			int i=0;
			int j=0;
			while(i<l&&j<r)
			{
				if(lf[i]==rt[j])
				{
					i+=1;
					j+=1;
				}
				else{
					if(lf[i]<rt[j])
					{
						left.pb(lf[i]);
						i+=1;	
					}
					else
					{
						right.pb(rt[j]);
						j+=1;
					}
				}
			}
			while(j<r){
				right.pb(rt[j]);
				j+=1;
			}
			while(i<l) {
				left.pb(lf[i]);
				i+=1;
			}
			
			int ans=0;
//			cout<<ans<<" k kjh	e\n";
			int ff=0;
			n=abs((int)right.size()-(int)left.size());
			if(left.size()>right.size())
			{
				ff=1;
				int p1=0;
				for(auto i:left)
				{
//					if(p1>=n/2){
////						f=-1;
//						break;
//					}
					mp[i]+=1;
					if(mp[i]==2&&p1<n/2)
					{
						right.pb(i);
						ans+=1;
						p1+=1;
						mp[i]=0;
					}
					else ll.pb(i);
				}
			}
			
			else if(left.size()<right.size())
			{
				ff=-1;
				int p1=0;
				for(auto i:right)
				{
//					if(p1>=n/2){
////						f=-1;
//						break;
//					}
//					cout<<i<<" adljfg\n";
					mp2[i]+=1;
					if(mp2[i]==2&&p1<n/2)
					{
						left.pb(i);
						ans+=1;
						p1+=1;
						mp2[i]=0;
					}
					else rr.pb(i);
				}
			}
			int p1=left.size();
			int p2=right.size();
			if(ff==1)
			{
				vec(int) pp1,pp2;
				remove(ll,right,pp1,pp2);
//				for(auto i:pp1) cout<<i<<" d ";
//				nl;
//				for(auto i:pp2) cout<<i<<"  f ";
//				nl;
				int an1=abs((int)pp1.size()-(int)pp2.size());
//				cout<<an1<<"lkelw\n";
				int q1=min((int)pp1.size(),(int)pp2.size())+an1/2;
				cout<<ans+q1+an1/2<<"\n";
			}
			else if(ff==-1)
			{
				vec(int) pp1,pp2;
				remove(left,rr,pp1,pp2);
//				for(auto i:pp1) cout<<i<<" d ";
//				nl;
//				for(auto i:pp2) cout<<i<<"  f ";
//				nl;
				int an1=abs((int)pp1.size()-(int)pp2.size());
//				cout<<an1<<"lkelw\n";
				int q1=min((int)pp1.size(),(int)pp2.size())+an1/2;
				cout<<ans+q1+an1/2<<"\n";
			}
//			for(auto i:left) cout<<i<<" d ";
//			nl;
//			for(auto i:right) cout<<i<<"  f ";
//			nl;
			else{
				cout<<ans+left.size()<<"\n";
			}
//			sort(all(left));
//			sort(all(right));
//			for(auto i:left) cout<<i<<" ";
//			nl;
//			for(auto i:right) cout<<i<<" ";
//			nl;
//			fr(i,0,left.size())
//			{
//				if(left[i]!=right[i])
//				{
//					ans+=1;
//				}
//			}
//			cout<<ans<<" kjhkj\n";
			
		}
	}
		
	
		
	
	


		