#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int MOD = 1e9 + 7;

int  dp[150][260];
int sum[150][260];
int cur[1010 * 260];
int a[1010];
int b[1010];
int head[1010];

int main()
{
    freopen("kebab.in", "r", stdin);
    freopen("kebab.out", "w", stdout);
    int n, t;
    while (scanf("%d%d", &n, &t) != EOF) {
		int T = t + 10;
        memset(dp, 0, sizeof(dp));
        memset(sum, 0, sizeof(sum));
        int tot = 0;
        for (int i = 1; i <= n; i++) {
            scanf("%d%d", a + i, b + i);
            head[i] = tot + 1;
            for (int j = 0; j < a[i]; j++) cur[++tot] = i;
        }

        for (int i = 1; i <= tot; i++) {    
			memset(dp[i % T], 0, sizeof(dp[i % T]));
			memset(sum[i % T], 0, sizeof(sum[i % T]));
            for (int j = i - head[cur[i]] + 1; j >= 0; j--) {
                //work
                if (i == head[cur[i]] && j == 1) {
                    if (i == 1) 
                        dp[i % T][j] = 1;
                    else {
                        dp[i % T][j] = sum[(i - 1 + T) % T][b[cur[i - 1]]];
                    }
                }
                else
                if (j > 0) {
                    dp[i % T][j] += dp[(i - 1 + T) % T][j - 1];
                    dp[i % T][j] %= MOD;    
                }
                
                //relax
                if (i - (t + 1) < 1) { 
                    if (j == i - head[cur[i]]) {
						dp[i % T][j] += 1;
						dp[i % T][j] %= MOD;
					}
                }
                else {
                    if (cur[i - (t + 1)] == cur[i]) {
                        if (j - t >= 0) {
                            dp[i % T][j] += dp[(i - (t + 1) + T) % T][j - t]; 
                            dp[i % T][j] %= MOD;
                        }
                    }
                    else {
                        if (j == i - head[cur[i]]) {
                            int idx = cur[i - (t + 1)];
                            int len = head[idx] + a[idx] - 1 - (i - (t + 1));
                            dp[i % T][j] += sum[(i - (t + 1) + T) % T][max(0, b[idx] - len)];
                            dp[i % T][j] %= MOD;
                        }
                    }
                }
                sum[i % T][j] = (sum[i % T][j + 1] + dp[i % T][j]) % MOD;
            }
        }
        printf("%d\n", sum[tot % T][b[n]]);
    }
    return 0;
}

