// Problem: B. Fair Division
// Contest: Codeforces - Codeforces Round 693 (Div. 3)
// URL: https://c...content-available-to-author-only...s.com/problemset/problem/1472/B
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://c...content-available-to-author-only...r.org)
#include <bits/stdc++.h>
using namespace std;
bool multicases_=true;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
// template<class T>using ordered_multiset = tree<T,null_type,less_equal<T>,rb_tree_tag,tree_order_statistics_node_update>;
template<typename T>using ordered_multiset = tree<pair<T, int>, null_type, less<pair<T, int>>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T>using ordered_set = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
using ll = long long;
#define int long long//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<??
typedef unsigned long long u64;//this or the one below
#define ull unsigned long long
int total,n;
vector<int>v;
// int dp[105][205];
// bool go(int idx,int taken){
//
// if(taken*2==total)return true;
//
// //fix : >n-1 not >n
// if(idx>n-1||taken>total)return false;
//
// if(~dp[idx][taken])return dp[idx][taken];
//
// bool ch1= go(idx+1,taken+v[idx]);
// bool ch2= go(idx+1,taken);
//
// bool ans=ch1||ch2;
//
// return dp[idx][taken]=ans; // fixxx : dp=ans not vice versa !!!!
// }
void pre_compute(){
//fix: reset each time not only here
///this was wrong order in the memset function:
// memset(dp,sizeof(dp),-1);
}
void solve(int tc){
// //dbg:
// cerr<<"at the test case no."<<tc<<" : \n";
//you can use instead of that number of indices left
//and initalize only before the first test case
// memset(dp, -1, sizeof(dp));
cin>>n;
v.assign(n,0);
for(auto&x:v)cin>>x;
total=accumulate(v.begin(),v.end(),0LL);
// cout<<(go(0,0)?"YES\n":"NO\n");
//now iterative (only 1d) dp
if(total&1)return void(cout<<"NO\n");
int target=total/2;
vector<bool>dp(target+1,false);
//now the state is s (summation)
// it represents wheter the s is reachable from the n elements we have or no
dp[0]=true;
for(int x:v){
for(int s = target ;s>=x;s--){
dp[s]=dp[s]||dp[s-x];
// ^ the leave case
//(if it was already reached before using this candy)
//the take case through dp[s-x]
//which means if this candy of weight x was taken
//then can i make the remaining s-x before taking it?
//important question : why the order of the loop is reversed
}
}
cout<<(dp[target]?"YES\n":"NO\n");
// //iterative dp now:
//
// //if total is not divisible by 2 then immediately reurn the output NO\n
// if (total % 2) {
// cout << "NO\n";
// return;
// }
//
//
// int target=total/2;//focus error fix:total/2 not n/2
// vector<vector<bool>>dp(n+1,vector<bool>(target+1,false));
//
// //states : dp[i][s] => i means how many candies are we allowed to use
// // => s means what sum are we trying to make
//
//
// //base case: we can build sum of 0 using 0 candies
// dp[0][0]=true;
// //all s values for i=1 is false
// //because when you don't choose anything all what you can make is 1
//
//
// for(int i = 1 ;i <= n ;i++){ //you have now i elements to build your target
//
// for(int s = 0; s<=target;s++){ //know if s is reachable from the i indices
// //may be some of them
//
// //leave
// //if i can make s without the current candy
// //then it can be done with the current candy also
// dp[i][s]=dp[i-1][s];
//
//
// //take
// //if i take the current one, can the previous ones build the remaining ?
// if(s>=v[i-1]){
// dp[i][s]=dp[i][s]||dp[i-1][s-v[i-1]];
// }
//
// }
//
// }
//
//
// //now the question is can i build the target from the n elements
// // and the target is total/2
// // so if we can build the half of the sum from the n elements
// //then the reamining half is the rest untaken cells
// cout<<(dp[n][target]?"YES\n":"NO\n");
// int ones=count(v.begin(),v.end(),1),twos=count(v.begin(),v.end(),2);
//
// int sm=ones+twos*2;
//
// //summation of all values must be even
// if(sm&1) return void (cout<<"NO\n");
//
// //if total is even and we have someones so these ones summation must be even
// //becuase twos are actually even so also ones summation is even
// //to make the total sum even
//
// //if we have ones (and as proved summation of ones is even)
// if(ones)return void (cout<<"YES\n");
//
//
// //examples
// // when number of twos is even : 2 2 1 1 (2 1 , 2 1)
// // when number of twos is odd : 2 1 1 (1 1, 2)
//
// //so if we have ones and total is even then it is ok
//
//
// //if we don't have ones then number of twos must be even
// if(twos&1)cout<<"NO\n";
// else cout<<"YES\n";
//
// if( (ones+2*twos)&1 )return void (cout<<"NO\n");
//
// int sm= (ones + 2*twos)/2;
//
// if( (sm%2==0) || ((sm&1) && ones) ) cout<<"YES\n";
// else cout<<"NO\n";
//
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
pre_compute();
int tc=1;
if(multicases_)cin>>tc;
int total_tcs=tc;
while(tc--){
solve(total_tcs-tc);
}
return 0;
}