#include <bits/stdc++.h>
using namespace std;
void YES(bool flag) { cout << (flag ? "YES" : "NO") << endl; }
void Yes(bool flag) { cout << (flag ? "Yes" : "No") << endl; }
void yes(bool flag) { cout << (flag ? "yes" : "no") << endl; }
const int INF = 1e7;
const long long MOD = 1e9 + 7;
long long n, m, ans = 0ll;
map<string, long long> ms, mt;
vector<int> s, t;
void dbg() {
  for (auto itr : ms) {
    cout << itr.first << "(" << itr.second << ") ";
  }
  putchar('\n');
  for (auto itr : mt) {
    cout << itr.first << "(" << itr.second << ") ";
  }
  putchar('\n');
}
void ss(string str, int i) {
  if (i != n) {
    string str_n;
    str_n = str + to_string(s[i]) + '_';
    ss(str, i + 1);
    ss(str_n, i + 1);
  } else {
    ms[str]++;
  }
}
void tt(string str, int i) {
  if (i != m) {
    string str_n;
    str_n = str + to_string(t[i]) + '_';
    tt(str, i + 1);
    tt(str_n, i + 1);
  } else {
    mt[str]++;
  }
}
int main() {
  cin >> n >> m;
  s.resize(n);
  t.resize(m);
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < m; i++) cin >> t[i];
  ss("", 0);
  tt("", 0);
  for (auto itr : ms) {
    ans += itr.second * mt[itr.first];
    ans %= MOD;
  }
  cout << ans << endl;
  return 0;
}
