//小蓝吃糖果 考察优先队列
#include<bits/stdc++.h>
#include <cstdint>
#include <queue>
using namespace std;
using ll=long long;
const ll N=1e6+9;
ll m[N];
int main()
{
ll n;
cin>>n;
priority_queue<ll>pq;
int sum=0;
for(ll i=0;i<n;++i)
{
cin>>m[i];
pq.push(m[i]);
sum+=m[i];
}
ll max=pq.top();
if(sum-max>=max-1)//max-1指可插入的空隙数,sum-max指除最大糖果外剩余的糖果
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
return 0;
}
/*
//不使用优先队列 仅使用基本函数max
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll N=1e6+9;
int m[N];
int main()
{
ll n;
cin>>n;
int sum=0;
int max_num=0;
for(ll i=0;i<n;++i)
{
cin>>m[i];
sum+=m[i];
max_num=max(m[i],max_num);
}
if(sum-max_num>=max_num-1)
{
cout<<"Yes"<<endl;
}
else {
cout<<"No"<<endl;
}
return 0;
}
*/
/*
#include<bits/stdc++.h>
#include <queue>
using namespace std;
int main()
{
int n,m;
cin>>n;
priority_queue<int>pq;
for(int i=0;i<n;++i)
{
cin>>m;
pq.push(m);
}
//思想:最开始吃最大的两个数,吃到最后如果剩下的某种糖果数量>1,那么说明其他种类的糖果消不掉数量最大的糖果,输出No
while(pq.size()>=2)
{
int x=pq.top();
pq.pop();//只有每次循环都pop出去才会更新top
int y=pq.top();
pq.pop();
pq.push(x-y);//x和y互相吃剩下的糖果数 倒回去
}
if(pq.size()>1)
{
cout<<"No"<<endl;
}
else {
cout<<"Yes"<<endl;
}
return 0;
}
*/