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 CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
void printArray(long long int* nums, int size);
void swap(long long int* a, long long int* b);
int partition(long long int* nums, int low, int high);
void quicksort(long long int* nums, int low, int high);
int main() {
  long long int maxCap = 0;
  long long int secMaxCap = 0;
  long long int sumRemain = 0;
  int n;
  cin >> n;
  long long int *remain = (long long int*)malloc(n * sizeof(long long int)),
                *capacity = (long long int*)malloc(n * sizeof(long long int));
  for (int i = 0; i < n; i++) {
    cin >> remain[i];
  }
  for (int i = 0; i < n; i++) {
    cin >> capacity[i];
  }
  for (int i = 0; i < n; i++) {
    int temp = capacity[i];
    if (temp > maxCap) {
      secMaxCap = maxCap;
      maxCap = temp;
    } else if (temp > secMaxCap) {
      secMaxCap = temp;
    }
  }
  for (int i = 0; i < n; i++) {
    sumRemain += remain[i];
  }
  if (maxCap + secMaxCap >= sumRemain) {
    cout << "YES";
    return 0;
  }
  cout << "NO";
  return 0;
}
void printArray(long long int* nums, int size) {
  for (int i = 0; i < size; i++) {
    cout << nums[i] << " ";
  }
  cout << endl;
}
void swap(long long int* a, long long int* b) {
  int temp = *a;
  *a = *b;
  *b = temp;
}
int partition(long long int* nums, int low, int high) {
  long long int pivot = nums[high];
  int crawler = low - 1;
  for (int j = low; j < high; j++) {
    if (nums[j] <= pivot) {
      crawler++;
      swap(&nums[crawler], &nums[j]);
    }
  }
  swap(&nums[high], &nums[crawler + 1]);
  return crawler + 1;
}
void quicksort(long long int* nums, int low, int high) {
  if (low < high) {
    int pi = partition(nums, low, high);
    quicksort(nums, low, pi - 1);
    quicksort(nums, pi + 1, high);
  }
}