题目链接
大意:给你一个目标点,让你从(0,0)出发走k步到(n,m),(8个方向),问你最多能走几次斜着的,或者不能到

思路:我们思考一下我们该怎么走,显然我们上来先斜着走到一个坐标为0,(从(n,m)到(0,0) ),然后我们看剩余的步数last和剩下的k,的奇偶关系。(首先要满足能走到的条件)
如果两个都是偶数的话,我们显然可以直接走完k步
如果last是偶数但是k是奇数的话,我们显然要把之前斜着走的一次给换成直着走的,然后奇数k走一次直的就成偶数了,然后剩下的再斜着走就行。
last是奇数的情况直接输出K-1就行了。。因为我们可以走到目标点的相邻点然后直着走一次就到了

#include<bits/stdc++.h>

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define LL long long
#define pii pair<int,int>
#define SZ(x) (int)x.size()
#define all(x) x.begin(),x.end()

using namespace std;

LL gcd(LL a, LL b) {return b ? gcd(b, a % b) : a;}
LL lcm(LL a, LL b) {return a / gcd(a, b) * b;}
LL powmod(LL a, LL b, LL MOD) {LL ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
const int N = 5e5 + 3;
const LL mod = 1e9 + 7;
int t;
LL n,m,k;
int main() {
	ios::sync_with_stdio(false);
    for(cin>>t;t;t--){
        cin>>n>>m>>k;
        LL kk=k;
        LL x=min(abs(n),abs(m));
        if(n<0)n+=x;
        else n-=x;

        if(m<0)m+=x;
        else m-=x;
        if(k<x)cout<<-1<<endl,0;
        else{
            k-=x;
            LL last=abs(n)+abs(m);
            if(last%2==0&&last<=k){
                if(k%2==0){
                    cout<<kk<<endl;
                }else{
                    cout<<x-1+last+(kk-x-last)/2*2<<endl;
                }
            }else if(last%2&&last<=k){
                    cout<<kk-1<<endl;
            }else cout<<-1<<endl;
        }
    }
	return 0;
}
//1 0