#include <bits/stdc++.h>
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
using namespace std;
const ::std::uint_fast64_t MOD = 1e9 + 7;
class mint {
 private:
  using value_type = ::std::uint_fast64_t;
  value_type n;

 public:
  mint() : n(0) {}
  mint(::std::int_fast64_t _n) : n(_n < 0 ? MOD - (-_n) % MOD : _n % MOD) {}
  mint(const mint &m) : n(m.n) {}
  friend ::std::ostream &operator<<(::std::ostream &os, const mint &a) {
    return os << a.n;
  }
  friend ::std::istream &operator>>(::std::istream &is, mint &a) {
    value_type temp;
    is >> temp;
    a = mint(temp);
    return is;
  }
  mint &operator+=(const mint &m) {
    n += m.n;
    n = (n < MOD) ? n : n - MOD;
    return *this;
  }
  mint &operator-=(const mint &m) {
    n += MOD - m.n;
    n = (n < MOD) ? n : n - MOD;
    return *this;
  }
  mint &operator*=(const mint &m) {
    n = n * m.n % MOD;
    return *this;
  }
  mint &operator/=(const mint &m) { return *this *= m.inv(); }
  mint &operator++() { return *this += 1; }
  mint &operator--() { return *this -= 1; }
  mint operator+(const mint &m) const { return mint(*this) += m; }
  mint operator-(const mint &m) const { return mint(*this) -= m; }
  mint operator*(const mint &m) const { return mint(*this) *= m; }
  mint operator/(const mint &m) const { return mint(*this) /= m; }
  mint operator++(int) {
    mint t(*this);
    *this += 1;
    return t;
  }
  mint operator--(int) {
    mint t(*this);
    *this -= 1;
    return t;
  }
  mint operator==(const mint &m) const { return n == m.n; }
  mint operator!=(const mint &m) const { return n != m.n; }
  mint operator-() const { return mint(MOD - n); }
  mint pow(value_type b) const {
    mint ret(1), m(*this);
    while (b) {
      if (b & 1) ret *= m;
      m *= m;
      b >>= 1;
    }
    return ret;
  }
  mint inv() const { return pow(MOD - 2); }
};
int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<long long> x(n), y(m);
  for (int i = 0; i < (int)(n); i++) cin >> x[i];
  for (int i = 0; i < (int)(m); i++) cin >> y[i];
  mint dx = x[n - 1] - x[0];
  mint dy = y[m - 1] - y[0];
  mint ans = 0;
  if (n == 2 && m == 2) {
    ans = dx * dy;
    cout << ans << "\n";
    return 0;
  }
  if (n == 2 || m == 2) {
    ans = dx * dy * 2;
    cout << ans << "\n";
    return 0;
  }
  ans += dx * dy * 4;
  mint tx = x[n - 2] - x[1];
  mint ty = y[m - 2] - y[1];
  ans += (dx * dy + tx * dy) * mint(2 * (n - 3));
  ans += (dx * dy + dx * ty) * mint(2 * (m - 3));
  mint c = (n - 3) * (m - 3);
  ans += (dx * dy + tx * dy + dx * ty + tx * ty) * c;
  cout << ans << "\n";
  return 0;
}
