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
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

#define pb push_back
#define mp make_pair
#define fi first
#define se second

vector<int> d;

int func(int a, int b, int k) {
    if(k==-1) return 0;
    int x=a/d[k];
    int y=b/d[k];
    return x*y + max(func(a-x*d[k], y*d[k], k-1) + func(a, b-y*d[k], k-1), func(b-y*d[k], x*d[k], k-1) + func(b, a-x*d[k], k-1));
}

int main() {
	ios_base::sync_with_stdio(false), cin.tie(nullptr);

    int h, w;
    cin>>h>>w;
    int n;
    cin>>n;
    d.resize(n);
    for(int i=0;i<n;i++) cin>>d[i];

    int ans=-1;
    if(h%d[0]==0 && w%d[0]==0) ans=func(h, w, n-1); // prostokat jest pokrywalny wtw, gdy jest pokrywalny kwadratami o bokach d[0]
    cout<<ans<<'\n';

	return 0;
}