/*input
2
6
5 0 2 6 3 1
6
6
5 0 1 6 9 1
6
*/
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector< vi > vvi;
typedef pair< int, int > ii;
typedef long long int lli;
#define rep(i,n) \
for(int i = 0; i < n; i++)
bool bsearch(int arr[],int n, lli k){
int lo = 0;
int hi = n-1;
while(lo <= hi){
int mid = (lo+hi)/2;
if(k == arr[mid])
return true;
else if(k < arr[mid]){
hi = mid-1;
}
else{
lo = mid+1;
}
}
return false;
}
string solve(int arr[], int n, lli p){
for(int i = 0; i < n-2; i++){
for(int j = i+1; j < n-1; j++){
lli k = p - (arr[i] + arr[j]);
if(bsearch(arr+j+1, n-j+1, k)){
return "YES";
}
}
}
return "NO";
}
int main(int argc, char const *argv[])
{
int T;
cin >> T;
while(T--){
int n;
cin >> n;
int arr[n];
rep(i, n){
cin >> arr[i];
}
lli p;
cin >> p;
sort(arr, arr+n);
cout << solve(arr, n, p) << endl;
}
}
It is giving right answer on the sample test case, but judge says wrong answer 
Problem