#include <iostream>
#include<bits/stdc++.h>
using namespace std;
// leetcode 323
int threeSumMulti(vector<int>& nums, int target) {
int cnt = 0;
int mod=1e9+7;
unordered_map<int, int> mpp;
for (int k = 2; k < nums.size(); k++) {
int x = target - nums[k];
for (int j = 0; j < k; j++) {
int find = x - nums[j];
if (mpp.count(find)) {
cnt = (cnt + mpp[find])%mod;
}
mpp[nums[j]]++;
}
mpp.clear();
}
return cnt;
}
int main() {
int n,target;
cin>>n>>target;
vector<int> nums(n);
for(int i=0;i<n;i++){
cin>>nums[i];
}
int a = threeSumMulti(nums,target);
cout<<a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCi8vIGxlZXRjb2RlIDMyMwoKaW50IHRocmVlU3VtTXVsdGkodmVjdG9yPGludD4mIG51bXMsIGludCB0YXJnZXQpIHsKICAgICAgICBpbnQgY250ID0gMDsKICAgICAgICBpbnQgbW9kPTFlOSs3OwogICAgICAgICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gbXBwOwoKCiAgICAgICAgZm9yIChpbnQgayA9IDI7IGsgPCBudW1zLnNpemUoKTsgaysrKSB7CiAgICAgICAgICAgIGludCB4ID0gdGFyZ2V0IC0gbnVtc1trXTsKICAgICAgICAgIAoKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrOyBqKyspIHsKICAgICAgICAgICAgICAgIGludCBmaW5kID0geCAtIG51bXNbal07CiAgICAgICAgICAgICAgICBpZiAobXBwLmNvdW50KGZpbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgY250ID0gKGNudCArIG1wcFtmaW5kXSklbW9kOwogICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG1wcFtudW1zW2pdXSsrOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBtcHAuY2xlYXIoKTsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIHJldHVybiBjbnQ7CiAgICB9CgoKCmludCBtYWluKCkgewoJaW50IG4sdGFyZ2V0OwoJY2luPj5uPj50YXJnZXQ7Cgl2ZWN0b3I8aW50PiBudW1zKG4pOwoJZm9yKGludCBpPTA7aTxuO2krKyl7CgkJY2luPj5udW1zW2ldOwoJfQoJCglpbnQgYSA9IHRocmVlU3VtTXVsdGkobnVtcyx0YXJnZXQpOwoJY291dDw8YTsKCQoJCglyZXR1cm4gMDsKfQ==