## About the Problem

Setter(s) | Janmansh Agarwal |

Tester(s) | Vichitr Gandas |

Difficulty | Cakewalk |

Topics | Adhoc, Maths |

Practice | Link |

Contest | Link |

## Solution Idea

In one operation we are removing total of 4 boxes, hence the sum of the number of boxes in the stacks should be divisible by 4 . Now, suppose we remove 2 boxes from first stack, total of x times, remove 2 boxes from second stack y times and remove 2 boxes from third stack z times. Now if we are able to clear all the boxes from all three stacks then following conditions would hold -

A = 2*x + y + z,

B = x + 2*y + z,

C = x + y + 2*z .

Because total number of removed boxes should be equal to initial number of boxes in each stack.

From above three conditions we get,

A + B + C = 2*x + y + z + x + 2*y + z + x + y + 2*z = 4*(x+y+z) .

From here total number of moves,

x+y+z = (A+B+C)/4.

Total number of moves should be an integer hence (A+B+C) should be divisible by 4.

Also the minimum element should be greater than total number of moves hence

min(A,B,C) >= x+y+z

=> min(A,B,C) >= (A+B+C)/4

### Complexity Analysis

Time Complexity: \mathcal{O}(1) as we just need to check two conditions.

Space Complexity: \mathcal{O}(1) as no extra space needed.

## Codes

## Setter's Code

```
#include<bits/stdc++.h>
using namespace std;
#define ll long long
void solve(){
ll a[3];
cin>>a[0]>>a[1]>>a[2];
ll sum=0;
sum += a[0]+a[1]+a[2];
sort(a,a+3);
ll k=sum;
if(sum%4){
cout<<"NO\n";
return;
}
k/=4;
if(a[0]>=k){
cout<<"YES\n";
return;
}
cout<<"NO\n";
return;
}
signed main(){
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
ll t=1;
cin>>t;
while (t--){
solve();
}
return 0;
}
```

## Tester's Code

```
/***************************************************
@author: vichitr
Compiled On: 02 Mar 2021
*****************************************************/
#include<bits/stdc++.h>
#define int long long
#define fast ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL)
using namespace std;
signed main()
{
fast;
int t = 1;
cin >> t;
assert(t <= 1e5);
for(int i = 1; i <= t; i++)
{
int a, b, c; cin >> a >> b >> c;
assert(a > 0 and a <= 1e9);
assert(b > 0 and b <= 1e9);
assert(c > 0 and c <= 1e9);
if((a + b + c) % 4 == 0 and min({a, b, c}) >= (a + b + c) / 4)
cout<<"YES\n";
else
cout<<"NO\n";
}
return 0;
}
```

If you have used any other approach, share your approach in comments!

If you have any doubts, ask them in comments!