from collections import defaultdict

import numpy as np



N,M = list(map(int,input().split()))

A = input().split()



A = np.array(A,dtype='int64')

C = np.append([0],np.cumsum(A))

#累積和を算出して最初に０をつける。

L = [i%M for i in C]

#Ｍで割ったあまりを求めてリスト化

d = defaultdict(int)

for i in L:

    d[i] +=1

#各余りに対して、その数が何個あるかを求める。



ans = 0

for i in list(d.values()):

    S = i * (i-1) / 2

    ans+=S

    

print((int(ans)))
import collections

import numpy as np

 

N,M = list(map(int,input().split()))

A = np.array(input().split(),dtype='int64')

C = np.append([0],np.cumsum(A))



L = C % M

L_c = collections.Counter(L)

 

ans = 0

for i in list(L_c.values()):

    S = i * (i-1) / 2

    ans+=S

    

print((int(ans)))
from collections import defaultdict
import numpy as np

N, M = list(map(int, input().split()))
A = input().split()
A = np.array(A, dtype="int64")
C = np.append([0], np.cumsum(A))
# 累積和を算出して最初に０をつける。
L = [i % M for i in C]
# Ｍで割ったあまりを求めてリスト化
d = defaultdict(int)
for i in L:
    d[i] += 1
# 各余りに対して、その数が何個あるかを求める。
ans = 0
for i in list(d.values()):
    S = i * (i - 1) / 2
    ans += S
print((int(ans)))

import collections
import numpy as np

N, M = list(map(int, input().split()))
A = np.array(input().split(), dtype="int64")
C = np.append([0], np.cumsum(A))
L = C % M
L_c = collections.Counter(L)
ans = 0
for i in list(L_c.values()):
    S = i * (i - 1) / 2
    ans += S
print((int(ans)))

-from collections import defaultdict +import collections -A = input().split() -A = np.array(A, dtype="int64") +A = np.array(input().split(), dtype="int64") -# 累積和を算出して最初に０をつける。 -L = [i % M for i in C] -# Ｍで割ったあまりを求めてリスト化 -d = defaultdict(int) -for i in L: -    d[i] += 1 -# 各余りに対して、その数が何個あるかを求める。 +L = C % M +L_c = collections.Counter(L) -for i in list(d.values()): +for i in list(L_c.values()):