using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Runtime.Intrinsics.Arm; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, m, k) = (c[0], c[1], c[2]); var map = NArr(m); var mod = 1_000_000_007; var dp1 = new long[n]; dp1[0] = 1; var dp2 = new long[n]; for (var i = 0; i < k; ++i) { dp2[0] = 0; for (var j = 1; j < n; ++j) { dp1[j] = (dp1[j] + dp1[j - 1]) % mod; dp2[j] = 0; } for (var j = 0; j < m; ++j) { var sum = dp1[map[j][1] - 1]; if (map[j][0] > 1) sum = (sum + mod - dp1[map[j][0] - 2]) % mod; dp2[map[j][0] - 1] = (dp2[map[j][0] - 1] + sum) % mod; if (map[j][1] < n) dp2[map[j][1]] = (dp2[map[j][1]] + mod - sum) % mod; } for (var j = 1; j < n; ++j) dp2[j] = (dp2[j] + dp2[j - 1]) % mod; (dp1, dp2) = (dp2, dp1); } WriteLine(dp1[^1]); } }