import sys input = sys.stdin.readline N,M = map(int,input().split()) A = [0,0] + list(map(int,input().split())) def divisors(M):#Mの約数列 O(n^(0.5+e)) import math d=[] i=1 while math.sqrt(M)>=i: if M%i==0: d.append(i) if i**2!=M: d.append(M//i) i=i+1 d.sort() return d div = divisors(N) n = len(div) res = 0 mod = 10**9+7 z = N for i in range(n): for j in range(i): y,x = div[i],div[j] if y%x==0 and x!=1 and y!=N: inv = (A[x]-A[y])*(A[y]-A[z])*(A[z]-A[x]) tmp = (A[z]-A[x]) * (pow(A[z]-1,M-1,mod) - pow(A[y]-1,M-1,mod)) tmp %= mod tmp += (A[y]-A[z]) * (pow(A[z]-1,M-1,mod) - pow(A[x]-1,M-1,mod)) tmp %= mod tmp = (tmp * pow(inv,mod-2,mod)) % mod res += tmp def calc(x,y,z=N): inv = (A[x]-A[y])*(A[y]-A[z])*(A[z]-A[x]) tmp = (A[z]-A[x]) * (pow(A[z]-1,M-1,mod) - pow(A[y]-1,M-1,mod)) tmp %= mod tmp += (A[y]-A[z]) * (pow(A[z]-1,M-1,mod) - pow(A[x]-1,M-1,mod)) tmp %= mod tmp = (tmp * pow(inv,mod-2,mod)) % mod return tmp print(res) N_ok = [False for i in range(N+1)] for d in div: N_ok[d] = True lazy = [[] for i in range(N+1)] for _ in range(int(input())): x,y = map(int,input().split()) if y!=N: if N_ok[y]: res += calc(x,y) res %= mod else: lazy[y].append(x) else: y = x N_ok[y] = True for x in lazy[y]: res += calc(x,y) res %= mod lazy[y] = [] print(res)