using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Globalization; 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) = (c[0], c[1]); var v = NList; var r = NList; c = NList; var (a, b) = (c[0], c[1]); var mod = 1_000_000_007; var vdp = new long[100_001]; vdp[0] = 1; for (var i = 0; i < n; ++i) for (var j = vdp.Length - v[i] - 1; j >= 0; --j) vdp[j + v[i]] = (vdp[j + v[i]] + vdp[j]) % mod; var rdp = new long[100_001]; rdp[0] = 1; for (var i = 0; i < m; ++i) for (var j = rdp.Length - r[i] - 1; j >= 0; --j) rdp[j + r[i]] = (rdp[j + r[i]] + rdp[j]) % mod; rdp[0] = 0; for (var i = 1; i < rdp.Length; ++i) rdp[i] = (rdp[i] + rdp[i - 1]) % mod; var ans = 0L; for (var i = 1; i < vdp.Length; ++i) { if (vdp[i] == 0) continue; var min = (i + b - 1) / b; var max = i / a; if (min > 0) ans = (ans + vdp[i] * ((rdp[max] - rdp[min - 1] + mod) % mod)) % mod; else ans = (ans + vdp[i] * rdp[max]) % mod; } WriteLine(ans); } }