#include <bits/stdc++.h>
using namespace std;
using P = pair<long, long>;
const int mod = 1000000007;
const int MAX_V = 100005;
struct mint {
  long long int x;
  mint(long long int x = 0) : x(x % mod) {}
  mint& operator+=(const mint a) {
    if ((x += a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator-=(const mint a) {
    if (x < a.x) {
      x += mod;
    }
    x -= a.x;
    return *this;
  }
  mint& operator*=(const mint a) {
    x = (x * a.x) % mod;
    return *this;
  }
  mint& operator/=(const mint a) {
    *this *= a.inv();
    return *this;
  }
  mint operator+(const mint a) const {
    mint res(*this);
    return res += a;
  }
  mint operator-(const mint a) const {
    mint res(*this);
    return res -= a;
  }
  mint operator*(const mint a) const {
    mint res(*this);
    return res *= a;
  }
  mint operator/(const mint a) const {
    mint res(*this);
    return res /= a;
  }
  mint pow(long long int n) const {
    mint a(*this);
    mint res = 1;
    while (n > 0) {
      if (n & 1) res *= a;
      a *= a;
      n >>= 1;
    }
    return res;
  }
  mint inv() const { return pow(mod - 2); }
};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<long> x(n);
  vector<long> y(m);
  for (int i = 0; i < (x).size(); i++) scanf("%ld", &x[i]);
  ;
  for (int i = 0; i < (y).size(); i++) scanf("%ld", &y[i]);
  ;
  mint resX = 0;
  for (int i = 0; i < (int)(n - 1); i++) {
    mint kake = (x[i + 1] - x[i]);
    kake *= (i + 1) * (n - i - 1);
    resX += kake;
  }
  mint resY = 0;
  for (int i = 0; i < (int)(m - 1); i++) {
    mint kake = (y[i + 1] - y[i]);
    kake *= (i + 1) * (m - i - 1);
    resY += kake;
  }
  cout << (resX * resY).x << endl;
}
