object Main extends App {
  import scala.io.StdIn._
  val mod = 1000000007
  val Array(n, m, d) = readLine.trim.split(' ').map(_.toLong)
  val initSalaries = readLine.trim.split(' ').map(_.toLong)
  val jobTimes = readLine.trim.split(' ').map(_.toLong)
  val up = readLine.trim.split(' ').map(_.toLong)
  val wholeJobTime: Long = jobTimes.sum % mod
  println(
    calSalary(initSalaries, jobTimes, up, n.toInt, m.toInt, d)
  )
  def calSalary(initSalaries: Array[Long], jobTimes: Array[Long], up: Array[Long], n: Int, m: Int, d: Long): Long = {
    val segments = calSegmentsUntilPeriod(initSalaries, jobTimes, up, n.toInt, m.toInt)
    ((segments.map(_.wholeSalaryWhile(d / (n * m))).sum % mod) + calSegments(segments.map(_.salaryAt(d / (n * m))), jobTimes, up, n.toInt, m.toInt, (d % (n * m)).toInt)) % mod
  }
  case class SegmentNM(initialSalary: Long, upInSegment: Long, salaryForUp: Long) {
    def salaryAt(i: Long): Long = (initialSalary + upInSegment * i) % mod
    def wholeSalaryWhile(i: Long): Long = ((((salaryForUp + (initialSalary - upInSegment) * wholeJobTime * m) % mod) * i % mod) + (((upInSegment * wholeJobTime * m) % mod) * ((i * (i + 1) / 2) % mod)) % mod) % mod
  }
  def calSegments(initSalaries: Array[Long], jobTimes: Array[Long], up: Array[Long], n: Int, m: Int, dayCount: Int): Long = {
    val salaries = initSalaries.clone()
    var result = 0L
    for (day ← 0 until dayCount){
      for (job ← jobTimes.indices){
        result += salaries((job + day) % n) * jobTimes(job)
        result %= mod
      }
      salaries(day % n) += up(day % m)
      salaries(day % n) %= mod
    }
    result
  }
  def calSegmentsUntilPeriod(initSalaries: Array[Long], jobTimes: Array[Long], up: Array[Long], n: Int, m: Int): Array[SegmentNM] = {
    val upSalary = Array.tabulate(initSalaries.length){_ ⇒ 0L}
    val salaryForUp = Array.tabulate(initSalaries.length){_ ⇒ 0L}
    for (day ← 0 until n * m){
      for (job ← jobTimes.indices){
        salaryForUp((job + day) % n) += jobTimes(job) * upSalary((job + day) % n)
        salaryForUp((job + day) % n) %= mod
      }
      upSalary(day % n) += up(day % m)
      upSalary(day % n) %= mod
    }
    initSalaries.indices.map(i ⇒ SegmentNM(initSalaries(i), upSalary(i), salaryForUp(i))).toArray
  }
  implicit class Scope[T](val value: T) extends AnyVal {
    @inline
    def also(@inline func: T ⇒ Unit): T = {
      func(value)
      value
    }
    @inline
    def let[A](@inline func: T ⇒ A): A = func(value)
  }
}
