#include <bits/stdc++.h>
using namespace std;
using db = double;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
const int mod = 1e9 + 7;
const ll inf = 1e18;
const ld pie = acos((ld)-1);
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
ll mod_add(ll a, ll b, ll m) {
  a = a % m;
  b = b % m;
  return (((a + b) % m) + m) % m;
}
ll mod_mul(ll a, ll b, ll m) {
  a = a % m;
  b = b % m;
  return (((a * b) % m) + m) % m;
}
ll mod_sub(ll a, ll b, ll m) {
  a = a % m;
  b = b % m;
  return (((a - b) % m) + m) % m;
}
template <class T>
void __print(T x) {
  cerr << x;
}
template <class T, class U>
void __print(pair<T, U> p) {
  cerr << "{" << p.first << ", " << p.second << "}";
}
template <class T>
void __print(vector<T> arr) {
  cerr << "[ ";
  for (auto x : arr) {
    __print(x);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void __print(set<T> st) {
  cerr << "{ ";
  for (auto x : st) {
    __print(x);
    cerr << " ";
  }
  cerr << "}";
}
template <class T, class U>
void __print(vector<pair<T, U>> arr) {
  cerr << "[ ";
  for (auto x : arr) {
    __print(x);
    cerr << ", ";
  }
  cerr << "]";
}
template <class T, class U>
void __print(unordered_map<T, U> arr) {
  cerr << "{ ";
  for (auto x : arr) {
    __print(x);
    cerr << ", ";
  }
  cerr << "}";
}
template <class T, class U>
void __print(map<T, U> arr) {
  cerr << "{ ";
  for (auto x : arr) {
    __print(x);
    cerr << ", ";
  }
  cerr << "}";
}
template <typename... T>
void read(T &...args) {
  ((cin >> args), ...);
}
template <typename... T>
void write(T &&...args) {
  ((cout << args << " "), ...);
  cout << '\n';
}
const int MAXN = 31;
int N, K, A[MAXN], B[MAXN];
void solve() {
  int sum = 0;
  scanf("%d%d", &N, &K);
  for (int i = 0; i < N; ++i) {
    scanf("%d", &A[i]);
    sum += A[i];
  }
  for (int i = 0; i < N; ++i) {
    scanf("%d", &B[i]);
  }
  sort(A, A + N);
  sort(B, B + N, greater<int>());
  int cur = 0, i = 0;
  for (int i = 0; i < N && K > 0; ++i) {
    if (A[i] < B[i]) {
      swap(A[i], B[i]);
      K--;
    }
  }
  for (int i = 0; i < N; ++i) {
    cur += A[i];
  }
  printf("%d\n", max(sum, cur));
  return;
}
int main() {
  auto start = std::chrono::high_resolution_clock::now();
  int t;
  t = 1;
  scanf("%d", &t);
  while (t--) solve();
  auto stop = std::chrono::high_resolution_clock::now();
  auto duration =
      std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
  return 0;
}

### Prompt

In CPP, your task is to solve the following problem:

You are given two arrays a and b both consisting of n positive (greater than zero) integers. You are also given an integer k.

In one move, you can choose two indices i and j (1 ≤ i, j ≤ n) and swap a_i and b_j (i.e. a_i becomes b_j and vice versa). Note that i and j can be equal or different (in particular, swap a_2 with b_2 or swap a_3 and b_9 both are acceptable moves).

Your task is to find the maximum possible sum you can obtain in the array a if you can do no more than (i.e. at most) k such moves (swaps).

You have to answer t independent test cases.

Input

The first line of the input contains one integer t (1 ≤ t ≤ 200) — the number of test cases. Then t test cases follow.

The first line of the test case contains two integers n and k (1 ≤ n ≤ 30; 0 ≤ k ≤ n) — the number of elements in a and b and the maximum number of moves you can do. The second line of the test case contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 30), where a_i is the i-th element of a. The third line of the test case contains n integers b_1, b_2, ..., b_n (1 ≤ b_i ≤ 30), where b_i is the i-th element of b.

Output

For each test case, print the answer — the maximum possible sum you can obtain in the array a if you can do no more than (i.e. at most) k swaps.

Example

Input


5
2 1
1 2
3 4
5 5
5 5 6 6 5
1 2 5 4 3
5 3
1 2 3 4 5
10 9 10 10 9
4 0
2 2 4 3
2 4 2 3
4 4
1 2 2 1
4 4 5 4


Output


6
27
39
11
17

Note

In the first test case of the example, you can swap a_1 = 1 and b_2 = 4, so a=[4, 2] and b=[3, 1].

In the second test case of the example, you don't need to swap anything.

In the third test case of the example, you can swap a_1 = 1 and b_1 = 10, a_3 = 3 and b_3 = 10 and a_2 = 2 and b_4 = 10, so a=[10, 10, 10, 4, 5] and b=[1, 9, 3, 2, 9].

In the fourth test case of the example, you cannot swap anything.

In the fifth test case of the example, you can swap arrays a and b, so a=[4, 4, 5, 4] and b=[1, 2, 2, 1].

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
using db = double;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
const int mod = 1e9 + 7;
const ll inf = 1e18;
const ld pie = acos((ld)-1);
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
ll mod_add(ll a, ll b, ll m) {
  a = a % m;
  b = b % m;
  return (((a + b) % m) + m) % m;
}
ll mod_mul(ll a, ll b, ll m) {
  a = a % m;
  b = b % m;
  return (((a * b) % m) + m) % m;
}
ll mod_sub(ll a, ll b, ll m) {
  a = a % m;
  b = b % m;
  return (((a - b) % m) + m) % m;
}
template <class T>
void __print(T x) {
  cerr << x;
}
template <class T, class U>
void __print(pair<T, U> p) {
  cerr << "{" << p.first << ", " << p.second << "}";
}
template <class T>
void __print(vector<T> arr) {
  cerr << "[ ";
  for (auto x : arr) {
    __print(x);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void __print(set<T> st) {
  cerr << "{ ";
  for (auto x : st) {
    __print(x);
    cerr << " ";
  }
  cerr << "}";
}
template <class T, class U>
void __print(vector<pair<T, U>> arr) {
  cerr << "[ ";
  for (auto x : arr) {
    __print(x);
    cerr << ", ";
  }
  cerr << "]";
}
template <class T, class U>
void __print(unordered_map<T, U> arr) {
  cerr << "{ ";
  for (auto x : arr) {
    __print(x);
    cerr << ", ";
  }
  cerr << "}";
}
template <class T, class U>
void __print(map<T, U> arr) {
  cerr << "{ ";
  for (auto x : arr) {
    __print(x);
    cerr << ", ";
  }
  cerr << "}";
}
template <typename... T>
void read(T &...args) {
  ((cin >> args), ...);
}
template <typename... T>
void write(T &&...args) {
  ((cout << args << " "), ...);
  cout << '\n';
}
const int MAXN = 31;
int N, K, A[MAXN], B[MAXN];
void solve() {
  int sum = 0;
  scanf("%d%d", &N, &K);
  for (int i = 0; i < N; ++i) {
    scanf("%d", &A[i]);
    sum += A[i];
  }
  for (int i = 0; i < N; ++i) {
    scanf("%d", &B[i]);
  }
  sort(A, A + N);
  sort(B, B + N, greater<int>());
  int cur = 0, i = 0;
  for (int i = 0; i < N && K > 0; ++i) {
    if (A[i] < B[i]) {
      swap(A[i], B[i]);
      K--;
    }
  }
  for (int i = 0; i < N; ++i) {
    cur += A[i];
  }
  printf("%d\n", max(sum, cur));
  return;
}
int main() {
  auto start = std::chrono::high_resolution_clock::now();
  int t;
  t = 1;
  scanf("%d", &t);
  while (t--) solve();
  auto stop = std::chrono::high_resolution_clock::now();
  auto duration =
      std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
  return 0;
}

```