using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("5");
WillReturn.Add("3 4 1");
WillReturn.Add("7 0 0");
WillReturn.Add("0 0 7");
WillReturn.Add("0 0 0");
WillReturn.Add("1000000000000000 1000000000000000 1000000000000000");
//2
//1
//0
//0
//900000000000000
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = { };
Action<string> SplitAct = pStr =>
wkArr = pStr.Split(' ').Select(pX => long.Parse(pX)).ToArray();
foreach (string EachStr in InputList.Skip(1)) {
SplitAct(EachStr);
long Result = Solve_234_10(wkArr[0], wkArr[1], wkArr[2]);
Console.WriteLine(Result);
}
}
// 長さ(2,3,4)の個数を引数として
// 長さ10の棒を何本作れるかを返す
static long Solve_234_10(long pN2, long pN3, long pN4)
{
// mod 2で考えれば
// 長さ3の棒は、必ず2つペアにして
// 長さ6として使う必要あり
long N6 = pN3 / 2;
return Solve_123_5(pN2, pN4, N6);
}
// 長さ(1,2,3)の個数を引数として
// 長さ5の棒を何本作れるかを返す
static long Solve_123_5(long pN1, long pN2, long pN3)
{
long Answer = 0;
// 最優先で作る 2の棒1本と、3の棒1本
long MakePairCnt1 = Math.Min(pN2, pN3);
Answer += MakePairCnt1;
pN2 -= MakePairCnt1;
pN3 -= MakePairCnt1;
if (pN2 > 0) {
// 2の棒2本と、1の棒1本
long MakePairCnt2 = Math.Min(pN2 / 2, pN1);
Answer += MakePairCnt2;
pN2 -= MakePairCnt2 * 2;
pN1 -= MakePairCnt2;
// 2の棒1本と、1の棒3本
long MakePairCnt3 = Math.Min(pN2, pN1 / 3);
Answer += MakePairCnt3;
pN2 -= MakePairCnt3;
pN1 -= MakePairCnt3 * 3;
}
if (pN3 > 0) {
// 3の棒1本と、1の棒2本
long MakePairCnt4 = Math.Min(pN3, pN1 / 2);
Answer += MakePairCnt4;
pN3 -= MakePairCnt4;
pN1 -= MakePairCnt4 * 2;
}
// 最後に残った1の棒5本
Answer += pN1 / 5;
return Answer;
}
}