Problem: Jafar has n cans of cola. Each can is described by two integers: remaining volume of cola ai and can's capacity bi (ai ≤  bi).

Jafar has decided to pour all remaining cola into just 2 cans, determine if he can do this or not!

Input

The first line of the input contains one integer n (2 ≤ n ≤ 100 000) — number of cola cans.

The second line contains n space-separated integers a1, a2, ..., an (0 ≤ ai ≤ 109) — volume of remaining cola in cans.

The third line contains n space-separated integers that b1, b2, ..., bn (ai ≤ bi ≤ 109) — capacities of the cans.

Output

Print "YES" (without quotes) if it is possible to pour all remaining cola in 2 cans. Otherwise print "NO" (without quotes).

You can print each letter in any case (upper or lower).

Examples

Input

2
3 5
3 6


Output

YES


Input

3
6 8 9
6 10 12


Output

NO


Input

5
0 0 5 0 0
1 1 8 10 5


Output

YES


Input

4
4 1 0 3
5 2 2 3


Output

YES

Note

In the first sample, there are already 2 cans, so the answer is "YES".

Solution (in JAVA):

Solution:

import java.io.*;
import java.math.*;
import java.util.*;
import javax.swing.tree.TreeNode;
 


 
public class Main {
    
  static PrintWriter pw=new PrintWriter(System.out);

    
    
    
    
    
    
 
    public static void main(String[] args) throws IOException {
       Reader.init(System.in);
       int n=Reader.nextInt();
     
       int b[]=new int[n];
        long sum=0L;
        for (int i = 0; i < n; i++) 
           sum+=Reader.nextInt();
              
        for (int i = 0; i < n; i++) 
            b[i]=Reader.nextInt();
        
        Arrays.sort(b);
        
        if((b[n-1]+b[n-2])>=sum)
            pw.println("YES");
        else pw.println("NO");
        
        
        
pw.close();       
    
    }
}
 


 
class Reader {
 
        static BufferedReader reader;
        static StringTokenizer tokenizer;
 
        public static int pars(String x) {
            int num = 0;
            int i = 0;
            if (x.charAt(0) == '-') {
                i = 1;
            }
            for (; i < x.length(); i++) {
                num = num * 10 + (x.charAt(i) - '0');
            }
 
            if (x.charAt(0) == '-') {
                return -num;
            }
 
            return num;
        }
 
        static void init(InputStream input) {
            reader = new BufferedReader(
                    new InputStreamReader(input));
            tokenizer = new StringTokenizer("");
        }
 
        static void init(FileReader input) {
            reader = new BufferedReader(input);
            tokenizer = new StringTokenizer("");
        }
 
        static String next() throws IOException {
            while (!tokenizer.hasMoreTokens()) {
                tokenizer = new StringTokenizer(
                        reader.readLine());
            }
            return tokenizer.nextToken();
        }
 
        static int nextInt() throws IOException {
            return pars(next());
        }
 
        static long nextLong() throws IOException {
            return Long.parseLong(next());
        }
 
        static double nextDouble() throws IOException {
            return Double.parseDouble(next());
        }
    } 
    
    
class pair implements Comparable<pair>
	{
		int first, second,third;
 
		pair(int a, int b,int c)
		{
			first= a;  second = b; third=c;
		}
 
		public int compareTo(pair q)
		{
			if(first>q.first)
      return 1;
      else if(first<q.first)
      return -1;
      if( second>q. second)
      return 1;
      else if( second<q. second)
        return -1;
      return 0;
		}	
	}