注意:红绿灯亮的顺序:红灯亮完是绿灯,然后是黄灯,以此循环
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE = 1e5 + 10;
struct node {
long long k;
long long t;
} a[MAXSIZE];
int main() {
int n;
long long r, y, g;
long long sum = 0;
scanf("%lld%lld%lld", &r, &y, &g);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lld %lld", &a[i].k, &a[i].t);
//int yy = (sum - a[i].t) / (r + y + g);
if (a[i].k == 0) {
sum += a[i].t;
} else if (a[i].k == 1) {//红
if (sum <=a[i].t) {
sum = sum + a[i].t - sum;
}
if (sum > a[i].t) {
int x = (sum - a[i].t) % (r + y + g);
if (x > g&&x<=g+y) sum = sum + g+y-x+r;
if (x > y + g) sum = sum + r + y + g - x;
}
} else if (a[i].k == 2) { //黄
if (sum <= a[i].t) {
sum = sum+a[i].t-sum+r;
}
if (sum > a[i].t) {
int x = (sum - a[i].t) % (r + y + g);
if (x <=r) sum = sum + r - x;
if (x > g + r && x <= g + r + y) sum = sum + y+g+r - x+r;
}
} else if (a[i].k == 3) { //绿
if (sum > a[i].t) {
int x = (sum - a[i].t) % (r + y + g);
if (x <= y) sum = sum + y + r - x;
if (x > y && x <=r + y) sum = sum + r + y - x;
}
}
}
printf("%lld\n",sum);
return 0;
}