```go
package main
import (
"bufio"
"fmt"
"os"
)
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n int
fmt.Fscan(in, &n)
cnt := [3]int{}
for i := 0; i < n; i++ {
var x int
fmt.Fscan(in, &x)
cnt[x%3]++
}
ans := cnt[0] + min(cnt[1], cnt[2]) + (cnt[1]-min(cnt[1], cnt[2]))/3 + (cnt[2]-min(cnt[1], cnt[2]))/3
fmt.Fprintln(out, ans)
}
}
```