#include <vector>
#include <cassert>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <climits>
#include <fstream>
#include <sstream>
#include<ctype.h>
#define PI 3.1415926535897932384626433832795028841971693993751058209749Lf
#define INF 2000000000
#define INFI 1e37
#define pb push_back
#define PRINT(x) cout << #x << " " << x << endl
#define MAX ((int)1e6+10)
#define MOD 1000000007
#define BUF 4096
char ibuf[BUF];
int ipt = BUF;
int readInt() {
while (ipt < BUF && ibuf[ipt] < '0') ipt++;
if (ipt == BUF) {
fread(ibuf, 1, BUF, stdin);
ipt = 0;
while (ipt < BUF && ibuf[ipt] < '0') ipt++;
}
int n = 0;
while (ipt < BUF && ibuf[ipt] >= '0') n = (n*10)+(ibuf[ipt++]-'0');
if (ipt == BUF) {
fread(ibuf, 1, BUF, stdin);
ipt = 0;
while (ipt < BUF && ibuf[ipt] >= '0') n = (n*10)+(ibuf[ipt++]-'0');
}
return n;
}
int main() {
long n,m;
n=readInt();
m=readInt();
long a[n];
long long dp[n]; //stores min number of stops from ith stop to destination.
long long ways[n]; // Number of ways to reach destination from position i.
for(int i=0;i<n;i++) {a[i]=readInt(); dp[i]=ways[i]=0;}
dp[n-1]=0;
int i=n-1;int j=n-2;
while(j>=0)
{
if(a[i]-a[j]<=m) {dp[j]=(1+dp[i])%MOD; j--;}
else {i=j+1;}
}
ways[n-1]=0;
j=n-2;int k=0;
while(j>=0)
{
if(dp[j]==1) {ways[j]=1; j--; continue;}
else
{
k=j+1;
while(k<n && dp[j]-dp[k]<=1 && a[k]-a[j]<=m)
{
if(dp[j]-dp[k]==1) // Add ways if difference in number of steps is 1.
{
ways[j]=(ways[j]+ways[k])%MOD;
}
k++;
}
}
j--;
}
printf("%lld %lld",dp[0]-1,ways[0]);
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGU8Y3R5cGUuaD4KIAojZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OUxmCiNkZWZpbmUgSU5GIDIwMDAwMDAwMDAKI2RlZmluZSBJTkZJIDFlMzcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBQUklOVCh4KSAgICAgICAgICAgY291dCA8PCAjeCA8PCAiICAiIDw8IHggPDwgZW5kbAojZGVmaW5lIE1BWCAoKGludCkxZTYrMTApCiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBCVUYgNDA5NgogCmNoYXIgaWJ1ZltCVUZdOwppbnQgaXB0ID0gQlVGOwogCmludCByZWFkSW50KCkgewoJd2hpbGUgKGlwdCA8IEJVRiAmJiBpYnVmW2lwdF0gPCAnMCcpIGlwdCsrOwoJaWYgKGlwdCA9PSBCVUYpIHsKCQlmcmVhZChpYnVmLCAxLCBCVUYsIHN0ZGluKTsKCQlpcHQgPSAwOwoJCXdoaWxlIChpcHQgPCBCVUYgJiYgaWJ1ZltpcHRdIDwgJzAnKSBpcHQrKzsKCX0KCWludCBuID0gMDsKCXdoaWxlIChpcHQgPCBCVUYgJiYgaWJ1ZltpcHRdID49ICcwJykgbiA9IChuKjEwKSsoaWJ1ZltpcHQrK10tJzAnKTsKCWlmIChpcHQgPT0gQlVGKSB7CgkJZnJlYWQoaWJ1ZiwgMSwgQlVGLCBzdGRpbik7CgkJaXB0ID0gMDsKCQl3aGlsZSAoaXB0IDwgQlVGICYmIGlidWZbaXB0XSA+PSAnMCcpIG4gPSAobioxMCkrKGlidWZbaXB0KytdLScwJyk7Cgl9CglyZXR1cm4gbjsKfQoKaW50IG1haW4oKSB7CgkKCWxvbmcgbixtOwoJCgluPXJlYWRJbnQoKTsKCW09cmVhZEludCgpOwoJCglsb25nIGFbbl07Cglsb25nIGxvbmcgZHBbbl07IC8vc3RvcmVzIG1pbiBudW1iZXIgb2Ygc3RvcHMgZnJvbSBpdGggc3RvcCB0byBkZXN0aW5hdGlvbi4KCWxvbmcgbG9uZyB3YXlzW25dOyAvLyBOdW1iZXIgb2Ygd2F5cyB0byByZWFjaCBkZXN0aW5hdGlvbiBmcm9tIHBvc2l0aW9uIGkuCgkKCWZvcihpbnQgaT0wO2k8bjtpKyspIHthW2ldPXJlYWRJbnQoKTsgZHBbaV09d2F5c1tpXT0wO30KCQoJZHBbbi0xXT0wOwoJCglpbnQgaT1uLTE7aW50IGo9bi0yOwoJCgl3aGlsZShqPj0wKQoJewoJCWlmKGFbaV0tYVtqXTw9bSkge2RwW2pdPSgxK2RwW2ldKSVNT0Q7IGotLTt9CgkJZWxzZSB7aT1qKzE7fQoJfQoJCgl3YXlzW24tMV09MDsKCWo9bi0yO2ludCBrPTA7CgogCgl3aGlsZShqPj0wKQoJewogCQlpZihkcFtqXT09MSkge3dheXNbal09MTsgai0tOyBjb250aW51ZTt9CiAJCWVsc2UKIAkJewogCQkgICAgIGs9aisxOwogCQkgICAgIHdoaWxlKGs8biAmJiBkcFtqXS1kcFtrXTw9MSAmJiBhW2tdLWFbal08PW0pCiAJCSAgICAgewogCQkgICAgIAlpZihkcFtqXS1kcFtrXT09MSkgLy8gQWRkIHdheXMgaWYgZGlmZmVyZW5jZSBpbiBudW1iZXIgb2Ygc3RlcHMgaXMgMS4KIAkJICAgICAJewogCQkgICAgIAkgIHdheXNbal09KHdheXNbal0rd2F5c1trXSklTU9EOwogCQkgICAgIAl9CiAJCSAgICAgICAgaysrOwogCQkgICAgIH0KIAkJfQogCQlqLS07Cgl9CgoJcHJpbnRmKCIlbGxkICVsbGQiLGRwWzBdLTEsd2F5c1swXSk7CglyZXR1cm4gMDsKfQ==