#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define X first #define Y second #define pb push_back #define bit(x) (1 << (x)) #define bnum(x) (__builtin_popcount(x)) #define all(x) (x).begin(), (x).end() #define mset0(x) memset((x), 0, sizeof((x))) #define mset1(x) memset((x), -1, sizeof((x))) #define LET(x,a) __typeof(a) x(a) #define REP(v,it) for( LET(it,v.begin()) ; it != v.end() ; it++) #define sz(x) ((int)(x.size())) #define PQ priority_queue #define sqr(x) ((x) * (x)) using namespace std; typedef long long LL; typedef pair pii; typedef vector vi; typedef vector vpii; template inline void chkmin(T &a, T b) { if (b < a) a = b; } template inline void chkmax(T &a, T b) { if (a < b) a = b; } const int MX = 200005; int a[MX], b[MX]; LL sa[MX], sb[MX]; int main() { int T; int n, m; int i, j; for (scanf("%d", &T); T--; ) { scanf("%d%d", &n, &m); for (i = 1; i <= n; i++) scanf("%d", a + i); for (j = 1; j <= m; j++) scanf("%d", b + j); sort(a + 1, a + n + 1); sort(b + 1, b + m + 1); for (i = 1; i <= n; i++) sa[i] = sa[i - 1] + a[i]; for (j = 1; j <= m; j++) sb[j] = sb[j - 1] + b[j]; LL ans = 0; int cur = min(n, m); for (i = n; i; i--) { int id = upper_bound(b + 1, b + m + 1, a[i]) - b; id--; chkmin(cur, id); if (cur <= 0) break; chkmax(ans, sa[n] - sa[i - 1] - sb[n - i + 1]); cur--; } cout << ans << endl; } return 0; }