1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "bits/stdc++.h"
 
using namespace std;

template<typename _T> void _debug(const char *s, _T x){ cerr << s << " = " << x << "\n";}
template<typename _T, typename... R> void _debug(const char *s, _T x, R... r){ while(*s != ',') cerr << *s++; cerr << " = " << x << ", "; _debug(s + 1, r...);}
 
#define debug(...)  _debug(#__VA_ARGS__,  __VA_ARGS__)
 
#define sz(s)   int32_t(s.size())
#define all(x)  begin(x), end(x)
#define getuniqe(x) x.erase(unique(all(x)), end(x))
#define X first
#define Y second
 
using ll = long long;
using ld = long double;

#define int ll

int n;
vector<int> d;

int solve(int w, int h) {
    int res = 0;
    while (h * w != 0) {
        int cnt_h = h, cnt_w = w;
        for (int i = n - 1; i >= 0; i--) {
            int ile_h = cnt_h / d[i];
            int ile_w = cnt_w / d[i];
            if (ile_h == 0 || ile_w == 0) continue;
            // debug(cnt_w, cnt_h, ile_w, ile_h, i, d[i]);
            cnt_h = min(cnt_h, ile_h * d[i]);
            cnt_w -= ile_w * d[i];
            res += ile_h * ile_w;
        }
        h -= cnt_h;
    }
    return res;
}

int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int h, w;   cin >> h >> w >> n;
    d.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> d[i];
    }
    if (__gcd(h, w) % d[0]) {
        cout << "-1\n";
        return 0;
    }
    cout << min(solve(w, h), solve(h, w)) << "\n";
}