import Control.Monad import Data.List import Data.IntMap ((!)) import qualified Data.IntMap as M main = do n <- readLn ss <- replicateM n getLine [m,x,d] <- map read . words <$> getLine print $ lcp n m x d ss lcp n m x d ss = sum $ map lcp' (seed n m x d) where ss' = M.fromList (zip [1..] ss) lcp' (i,j) = length $ takeWhile id $ zipWith (==) (ss'!i) (ss'!j) seed n m x d = reverse $ snd $ foldl makeq (x,[]) [1..m] where makeq (x', acc) k = ((x' + d) `mod` (n * (n - 1)), (i',j'):acc) where i = (x' `div` (n - 1)) + 1 j = (x' `mod` (n - 1)) + 1 [i',j'] = if i>j then [j,i] else [i,j+1]