// Jai Shree Ram  
  
#include<bits/stdc++.h>
using namespace std;

#define rep(i,a,n)     for(int i=a;i<n;i++)
#define ll             long long
#define int            long long
#define pb             push_back
#define all(v)         v.begin(),v.end()
#define endl           "\n"
#define x              first
#define y              second
#define gcd(a,b)       __gcd(a,b)
#define mem1(a)        memset(a,-1,sizeof(a))
#define mem0(a)        memset(a,0,sizeof(a))
#define sz(a)          (int)a.size()
#define pii            pair<int,int>
#define hell           1000000007
#define elasped_time   1.0 * clock() / CLOCKS_PER_SEC



template<typename T1,typename T2>istream& operator>>(istream& in,pair<T1,T2> &a){in>>a.x>>a.y;return in;}
template<typename T1,typename T2>ostream& operator<<(ostream& out,pair<T1,T2> a){out<<a.x<<" "<<a.y;return out;}
template<typename T,typename T1>T maxs(T &a,T1 b){if(b>a)a=b;return a;}
template<typename T,typename T1>T mins(T &a,T1 b){if(b<a)a=b;return a;}


int solve(){
 	int n1,n2,n3;cin>>n1>>n2>>n3;
 	int s1=0,s2=0,s3=0;
 	int mn1=hell,mn2=hell,mn3=hell;
 	rep(i,1,n1+1){
 		int t;cin>>t;
 		s1+=t;
 		mins(mn1,t);
 	}
 	rep(i,1,n2+1){
 		int t;cin>>t;
 		s2+=t;
 		mins(mn2,t);
 	}
 	rep(i,1,n3+1){
 		int t;cin>>t;
 		s3+=t;
 		mins(mn3,t);
 	}
 	int ans=max({s1+s2-s3,s2+s3-s1,s1+s3-s2});
 	int mn=min({mn1+mn2,mn3+mn1,mn2+mn3});
 	maxs(ans,s1+s2+s3-2*mn);
 	cout<<ans<<endl;
 return 0;
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #ifdef SIEVE
    sieve();
    #endif
    #ifdef NCR
    init();
    #endif
    int t=1;//cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
 
### Prompt

Please create a solution in cpp to the following problem:

You are given three bags. Each bag contains a non-empty multiset of numbers. You can perform a number of operations on these bags. In one operation, you can choose any two non-empty bags, and choose one number from each of the bags. Let's say that you choose number a from the first bag and number b from the second bag. Then, you remove b from the second bag and replace a with a-b in the first bag. Note that if there are multiple occurrences of these numbers, then you shall only remove/replace exactly one occurrence.

You have to perform these operations in such a way that you have exactly one number remaining in exactly one of the bags (the other two bags being empty). It can be shown that you can always apply these operations to receive such a configuration in the end. Among all these configurations, find the one which has the maximum number left in the end.

Input

The first line of the input contains three space-separated integers n_1, n_2 and n_3 (1 ≤ n_1, n_2, n_3 ≤ 3⋅10^5, 1 ≤ n_1+n_2+n_3 ≤ 3⋅10^5) — the number of numbers in the three bags.

The i-th of the next three lines contain n_i space-separated integers a_{{i,1}}, a_{{i,2}}, ..., a_{{i,{{n_i}}}} (1 ≤ a_{{i,j}} ≤ 10^9) — the numbers in the i-th bag.

Output

Print a single integer — the maximum number which you can achieve in the end.

Examples

Input


2 4 1
1 2
6 3 4 5
5


Output


20

Input


3 2 2
7 5 4
2 9
7 1


Output


29

Note

In the first example input, let us perform the following operations:

[1, 2], [6, 3, 4, 5], [5]

[-5, 2], [3, 4, 5], [5] (Applying an operation to (1, 6))

[-10, 2], [3, 4], [5] (Applying an operation to (-5, 5))

[2], [3, 4], [15] (Applying an operation to (5, -10))

[-1], [4], [15] (Applying an operation to (2, 3))

[-5], [], [15] (Applying an operation to (-1, 4))

[], [], [20] (Applying an operation to (15, -5))

You can verify that you cannot achieve a bigger number. Hence, the answer is 20.

### Response

```cpp
// Jai Shree Ram  
  
#include<bits/stdc++.h>
using namespace std;

#define rep(i,a,n)     for(int i=a;i<n;i++)
#define ll             long long
#define int            long long
#define pb             push_back
#define all(v)         v.begin(),v.end()
#define endl           "\n"
#define x              first
#define y              second
#define gcd(a,b)       __gcd(a,b)
#define mem1(a)        memset(a,-1,sizeof(a))
#define mem0(a)        memset(a,0,sizeof(a))
#define sz(a)          (int)a.size()
#define pii            pair<int,int>
#define hell           1000000007
#define elasped_time   1.0 * clock() / CLOCKS_PER_SEC



template<typename T1,typename T2>istream& operator>>(istream& in,pair<T1,T2> &a){in>>a.x>>a.y;return in;}
template<typename T1,typename T2>ostream& operator<<(ostream& out,pair<T1,T2> a){out<<a.x<<" "<<a.y;return out;}
template<typename T,typename T1>T maxs(T &a,T1 b){if(b>a)a=b;return a;}
template<typename T,typename T1>T mins(T &a,T1 b){if(b<a)a=b;return a;}


int solve(){
 	int n1,n2,n3;cin>>n1>>n2>>n3;
 	int s1=0,s2=0,s3=0;
 	int mn1=hell,mn2=hell,mn3=hell;
 	rep(i,1,n1+1){
 		int t;cin>>t;
 		s1+=t;
 		mins(mn1,t);
 	}
 	rep(i,1,n2+1){
 		int t;cin>>t;
 		s2+=t;
 		mins(mn2,t);
 	}
 	rep(i,1,n3+1){
 		int t;cin>>t;
 		s3+=t;
 		mins(mn3,t);
 	}
 	int ans=max({s1+s2-s3,s2+s3-s1,s1+s3-s2});
 	int mn=min({mn1+mn2,mn3+mn1,mn2+mn3});
 	maxs(ans,s1+s2+s3-2*mn);
 	cout<<ans<<endl;
 return 0;
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #ifdef SIEVE
    sieve();
    #endif
    #ifdef NCR
    init();
    #endif
    int t=1;//cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
 
```