#include <iostream> #include <string> #include <vector> #include <algorithm> #include <utility> #include <tuple> #include <cstdint> #include <cstdio> #include <map> #include <queue> #include <set> #include <stack> #include <deque> #include <unordered_map> #include <unordered_set> #include <bitset> #include <cctype> #include <functional> #include <ctime> #include <fstream> #include <cmath> #include <limits> #include <numeric> #include <type_traits> #include <iomanip> #include <float.h> #include <math.h> #include <random> using namespace std; using ll = long long; long long modpow(long long a, long long n, long long mod) { long long res = 1; while (n > 0) { if (n & 1) res = res * a % mod; a = a * a % mod; n >>= 1; } return res; } int main() { ll n, m, x; cin >> n >> m >> x; ll r = 0; for (int i = 0; i < n + m; i++) { ll a; cin >> a; r ^= a; } if (r != 0)cout << 0 << endl; else cout << modpow(2, (n - 1) * (m - 1) * x, 1000000007) << endl; }