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
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>

using namespace std;

typedef long long LL;

LL H;
LL W;

LL uzyte = 0;

LL N;
LL rozmiary[37];

// Height, cost
pair<LL, LL> getMaxStrip(LL H, LL W) {
  LL j = 0;
  while (rozmiary[j] > min(H, W)) {
    j++;
  }

  LL STRHEIGHT = rozmiary[j];
  LL elementy = 0;

  while (W > 0) {
    while (rozmiary[j] > W) {
      j++;
    }
    LL cost = STRHEIGHT / rozmiary[j];

    LL amount = W / rozmiary[j];
    elementy += amount * cost;

    W -= amount * rozmiary[j];
  }

  return {STRHEIGHT, elementy};
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  cin >> H >> W;
  cin >> N;

  for (int i = 1; i <= N; i++) {
    cin >> rozmiary[N-i];
  }

  if (H % rozmiary[N-1] || W % rozmiary[N-1]) {
    cout << "-1\n";
    return 0;
  }

  while (H > 0) {
    pair<LL, LL> strip = getMaxStrip(H, W);
    LL amount = H / strip.first;
    H -= strip.first * amount;
    uzyte += strip.second * amount;
  }

  cout << uzyte << '\n';

  return 0;
}