#include<bits/stdc++.h>
using namespace std;
int convert_weekday[] = { 8, 2, 3, 4, 5, 6, 7 };
int calc_weekday(int dd, int mm, int yy) {
//formula to get weekday number
int rst =
dd
+ ((153 * (mm + 12 * ((14 - mm) / 12) - 3) + 2) / 5)
+ (365 * (yy + 4800 - ((14 - mm) / 12)))
+ ((yy + 4800 - ((14 - mm) / 12)) / 4)
- ((yy + 4800 - ((14 - mm) / 12)) / 100)
+ ((yy + 4800 - ((14 - mm) / 12)) / 400)
- 32045;
return (rst + 1) % 7;
}
bool isLeapYear(int year) {
if (year % 4 != 0) return false;
if (year % 100 != 0) return true;
if (year % 400 != 0) return false;
return true;
}
int daysInMonth(int month, int year) {
switch (month) {
case 4:
case 6:
case 9:
case 11: return 30;
case 2: {
if (isLeapYear(year)) return 29;
return 28;
}
default: return 31;
}
}
int calc_special_day(int x, int y, int i, int j) {
if (i < 1 || i > 12) {
cout << -1;
return 0;
}
int day_index = 1;
int weekday_count = calc_weekday(1, i, j);
while (convert_weekday[weekday_count] != y) {
weekday_count = (weekday_count + 1) % 7;
day_index++;
}
int max_day_of_month = daysInMonth(i, j);
int weekday_amount = (max_day_of_month - day_index) / 7 + 1;
if (x > 0 && x <= weekday_amount) return day_index + (x - 1) * 7;
else return -1;
}
int main() {
int x, y, i, j;
cin >> x >> y >> i >> j;
cout << calc_special_day(x, y, i, j);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgY29udmVydF93ZWVrZGF5W10gPSB7IDgsIDIsIDMsIDQsIDUsIDYsIDcgfTsKaW50IGNhbGNfd2Vla2RheShpbnQgZGQsIGludCBtbSwgaW50IHl5KSB7CiAgICAvL2Zvcm11bGEgdG8gZ2V0IHdlZWtkYXkgbnVtYmVyCiAgICBpbnQgcnN0ID0KICAgICAgICBkZAogICAgICAgICsgKCgxNTMgKiAobW0gKyAxMiAqICgoMTQgLSBtbSkgLyAxMikgLSAzKSArIDIpIC8gNSkKICAgICAgICArICgzNjUgKiAoeXkgKyA0ODAwIC0gKCgxNCAtIG1tKSAvIDEyKSkpCiAgICAgICAgKyAoKHl5ICsgNDgwMCAtICgoMTQgLSBtbSkgLyAxMikpIC8gNCkKICAgICAgICAtICgoeXkgKyA0ODAwIC0gKCgxNCAtIG1tKSAvIDEyKSkgLyAxMDApCiAgICAgICAgKyAoKHl5ICsgNDgwMCAtICgoMTQgLSBtbSkgLyAxMikpIC8gNDAwKQogICAgICAgIC0gMzIwNDU7CgogICAgcmV0dXJuIChyc3QgKyAxKSAlIDc7Cn0KCmJvb2wgaXNMZWFwWWVhcihpbnQgeWVhcikgewogICAgaWYgKHllYXIgJSA0ICE9IDApIHJldHVybiBmYWxzZTsKICAgIGlmICh5ZWFyICUgMTAwICE9IDApIHJldHVybiB0cnVlOwogICAgaWYgKHllYXIgJSA0MDAgIT0gMCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KCmludCBkYXlzSW5Nb250aChpbnQgbW9udGgsIGludCB5ZWFyKSB7CiAgICBzd2l0Y2ggKG1vbnRoKSB7CiAgICBjYXNlIDQ6CiAgICBjYXNlIDY6CiAgICBjYXNlIDk6CiAgICBjYXNlIDExOiByZXR1cm4gMzA7CiAgICBjYXNlIDI6IHsKICAgICAgICBpZiAoaXNMZWFwWWVhcih5ZWFyKSkgcmV0dXJuIDI5OwogICAgICAgIHJldHVybiAyODsKICAgIH0KICAgIGRlZmF1bHQ6IHJldHVybiAzMTsKICAgIH0KfQoKaW50IGNhbGNfc3BlY2lhbF9kYXkoaW50IHgsIGludCB5LCBpbnQgaSwgaW50IGopIHsKICAgIGlmIChpIDwgMSB8fCBpID4gMTIpIHsKICAgICAgICBjb3V0IDw8IC0xOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGludCBkYXlfaW5kZXggPSAxOwoKICAgIGludCB3ZWVrZGF5X2NvdW50ID0gY2FsY193ZWVrZGF5KDEsIGksIGopOwogICAgd2hpbGUgKGNvbnZlcnRfd2Vla2RheVt3ZWVrZGF5X2NvdW50XSAhPSB5KSB7CiAgICAgICAgd2Vla2RheV9jb3VudCA9ICh3ZWVrZGF5X2NvdW50ICsgMSkgJSA3OwogICAgICAgIGRheV9pbmRleCsrOwogICAgfQoKICAgIGludCBtYXhfZGF5X29mX21vbnRoID0gZGF5c0luTW9udGgoaSwgaik7CiAgICBpbnQgd2Vla2RheV9hbW91bnQgPSAobWF4X2RheV9vZl9tb250aCAtIGRheV9pbmRleCkgLyA3ICsgMTsKCiAgICBpZiAoeCA+IDAgJiYgeCA8PSB3ZWVrZGF5X2Ftb3VudCkgcmV0dXJuIGRheV9pbmRleCArICh4IC0gMSkgKiA3OwogICAgZWxzZSByZXR1cm4gLTE7Cn0KCmludCBtYWluKCkgewoKICAgIGludCB4LCB5LCBpLCBqOwogICAgY2luID4+IHggPj4geSA+PiBpID4+IGo7CiAgICBjb3V0IDw8IGNhbGNfc3BlY2lhbF9kYXkoeCwgeSwgaSwgaik7CgogICAgcmV0dXJuIDA7Cn0=