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
#include <bits/stdc++.h>
using namespace std;
long long d[102];
int n;
long long koszt_pokrycia(long long a, long long b)
{
    if(!(a&&b)) return 0;
    if(a<0||b<0) return -1;
    long long p1=min(a, b), p2=max(a, b);
    for(int i=n-1; i>=0; i--){
        if(d[i]<=p1){
            long long k1=p1/d[i], k2=p2/d[i];
            long long q1=koszt_pokrycia(p1-k1*d[i], k2*d[i]), q2=koszt_pokrycia(p1, p2-k2*d[i]);
            if(q1==-1||q2==-1) return -1;
            return k1*k2+q1+q2;
        } 
    }
    return -1;
}
int main()
{
    ios_base::sync_with_stdio(0);
    long long h, w;
    cin>>h>>w;
    cin>>n;
    for(int i=0; i<n; i++) cin>>d[i];
    cout<<koszt_pokrycia(h, w);
    return 0;
}