import Control.Applicative ((<$>))
import Control.Monad (replicateM_)
import Data.Array

byteDollarsInverseHelper :: (Int -> Int) -> Int -> Int -> Int -> Int -> Int
byteDollarsInverseHelper recur a b c d
  -- | d < 0 = 0
  | otherwise =
    min cap $ max 1 $ recur (d-a) + recur (d-b) + recur (d-c)
  where cap = 10000000000000000

byteDollarsInverseCached :: Int -> Int -> Int -> [Int]
byteDollarsInverseCached a b c = elems xs where
  xs = array (0, 4000) [(d, byteDollarsInverseHelper recur a b c d) | d <- [0..4000]]
  recur d
    | d < 0 = 0
    | otherwise = xs ! d

byteDollars' :: Int -> Int -> Int -> Int -> Int
byteDollars' a b c n =
  length . takeWhile (< n) $ byteDollarsInverseCached a b c

main :: IO ()
main = do
  t <- readLn
  replicateM_ t $ do
    [n, a, b, c] <- map read . words <$> getLine
    print (byteDollars' a b c n)