

최대한 많은칸을 선택하기 위해서는 다음의 조건이 고려되어야 합니다.
1행1열부터 시작해야 합니다.
N칸 혹은 M칸'이상' 떨어지 않고 세로로 N칸'만', 가로로 M칸'만'떨어져야 합니다.
다음을 생각해 봅시다. 강의실은 가로1 세로5 크기이며, 강의실의 (1,1)에 한 참가자가 앉아있습니다.
1칸을 띄어 앉아야 한다면 (1,3), (1,5) 총 두 명의 참가자가 앉을 수 있습니다. (총 3명)
1 X 2 X 3
2칸을 띄어 앉아야 한다면 (1,4) 혹은 (1,5)에 한 명의 참가자가 앉을 수 있습니다. (총 2명)
1 X X 2 X
3칸을 띄어 앉아야 한다면 (1,5)에 한 명의 참가자가 앉을 수 있습니다. (총 2명)
1 X X X 2
4칸을 띄어 앉아야 하다면 더 이상 참가자가 들어올 수 없습니다. (총 1명)
1 X X X X
(강의실 길이)/(띄어앉은 칸+1)을 올림한 값과 동일합니다.H,W,N,M = list(map(int,input().split(' ')))
#math.ceil()함수는 숫자의 올림을 계산해 줍니다
import math
a = math.ceil(H/(N+1)) # 세로에 몇 명이 앉는지를 계산합니다
b = math.ceil(W/(M+1)) # 가로에 몇 명이 앉는지를 계산합니다
answer = a*b #가로와 세로의 값을 곱합니다
print(answer)
math.ceil(H/(N+1))이 성립되지를 만족스럽게 설명하지 못해 아쉽다.전체 5칸, 띄어앉아야 하는 길이가 4일 때(5/5=1) 딱 1명이 들어오며,
띄어앉아야 하는 길이가 3으로 줄어들 때(5/4=1.25) 1명이 추가되며,
띄어앉아야 하는 길이가 2로 줄어들 때(5/3=1.67) 인원이 변하지 않으며,
띄어앉아야 하는 길이가 1로 줄어들 때(5/2=2/5) 1명이 더 추가되는 규칙이 발견된다