#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
const int MAXN = 300000;
int n, k;
int a[MAXN];
map<ll,int> table;
ll go(int l, int r)
{
if (l>=r) return 0;
if (l+1 == r) return (max(a[l], a[r])%k == 0);
// O(n)
int m = l;
for (int i=l+1; i<=r; i++)
if (a[i] < a[m])
m = i;
else if (a[i]==a[m])
{
if (abs((l+r)/2 - m) > abs((l+r)/2 - i))
m = i;
}
ll ret = 0;
table.clear();
ll sum = 0;
table.insert(pair<ll, int>(0, 1));
for (int i=m-1; i>=l; i--)
{
sum+=a[i];
if (sum>=k) sum %= k;
if (table.find(sum) != table.end())
table[sum]++;
else
table.insert(pair<ll, int>(sum, 1));
}
sum = 0;
if (table.find(0) != table.end()) ret += table[0]-1;
for (int i=m+1; i<=r; i++)
{
sum += a[i];
if (sum>=k) sum%=k;
ll x = k - sum;
if (x==k) x=0;
if (table.find(x) != table.end()) ret += table[x];
}
ret += go(l, m-1) + go(m+1, r);
return ret;
}
int main()
{
scanf("%d%d", &n, &k);
for (int i=0; i<n; i++)
scanf("%d", &a[i]);
ll ans = go(0, n-1);
printf("%lld\n", ans);
}
ICAgICNpbmNsdWRlIDxjc3RkaW8+CiAgICAjaW5jbHVkZSA8Y3N0cmluZz4KICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAjaW5jbHVkZSA8bWFwPgogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogICAgdHlwZWRlZiBsb25nIGxvbmcgbGw7CiAgICBjb25zdCBpbnQgTUFYTiA9IDMwMDAwMDsKIAogICAgaW50IG4sIGs7CiAgICBpbnQgYVtNQVhOXTsKICAgIG1hcDxsbCxpbnQ+IHRhYmxlOwogCiAgICBsbCBnbyhpbnQgbCwgaW50IHIpCiAgICB7CiAgICBpZiAobD49cikgcmV0dXJuIDA7CiAgICBpZiAobCsxID09IHIpIHJldHVybiAobWF4KGFbbF0sIGFbcl0pJWsgPT0gMCk7CiAgICAvLyBPKG4pCiAgICBpbnQgbSA9IGw7CiAgICBmb3IgKGludCBpPWwrMTsgaTw9cjsgaSsrKQogICAgaWYgKGFbaV0gPCBhW21dKQogICAgbSA9IGk7CiAgICBlbHNlIGlmIChhW2ldPT1hW21dKQogICAgewogICAgaWYgKGFicygobCtyKS8yIC0gbSkgPiBhYnMoKGwrcikvMiAtIGkpKQogICAgbSA9IGk7CiAgICB9CiAgICBsbCByZXQgPSAwOwogICAgdGFibGUuY2xlYXIoKTsKICAgIGxsIHN1bSA9IDA7CiAgICB0YWJsZS5pbnNlcnQocGFpcjxsbCwgaW50PigwLCAxKSk7CiAgICBmb3IgKGludCBpPW0tMTsgaT49bDsgaS0tKQogICAgewogICAgc3VtKz1hW2ldOwogICAgaWYgKHN1bT49aykgc3VtICU9IGs7CiAgICBpZiAodGFibGUuZmluZChzdW0pICE9IHRhYmxlLmVuZCgpKQogICAgdGFibGVbc3VtXSsrOwogICAgZWxzZQogICAgdGFibGUuaW5zZXJ0KHBhaXI8bGwsIGludD4oc3VtLCAxKSk7CiAgICB9CiAgICBzdW0gPSAwOwogICAgaWYgKHRhYmxlLmZpbmQoMCkgIT0gdGFibGUuZW5kKCkpIHJldCArPSB0YWJsZVswXS0xOwogICAgZm9yIChpbnQgaT1tKzE7IGk8PXI7IGkrKykKICAgIHsKICAgIHN1bSArPSBhW2ldOwogICAgaWYgKHN1bT49aykgc3VtJT1rOwogICAgbGwgeCA9IGsgLSBzdW07CiAgICBpZiAoeD09aykgeD0wOwogICAgaWYgKHRhYmxlLmZpbmQoeCkgIT0gdGFibGUuZW5kKCkpIHJldCArPSB0YWJsZVt4XTsKICAgIH0KICAgIHJldCArPSBnbyhsLCBtLTEpICsgZ28obSsxLCByKTsKICAgIHJldHVybiByZXQ7CiAgICB9CiAKICAgIGludCBtYWluKCkKICAgIHsKICAgIHNjYW5mKCIlZCVkIiwgJm4sICZrKTsKICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCiAgICBzY2FuZigiJWQiLCAmYVtpXSk7CiAgICBsbCBhbnMgPSBnbygwLCBuLTEpOwogICAgcHJpbnRmKCIlbGxkXG4iLCBhbnMpOwogICAgfQ==