import java.io.*;
import java.util.*;
public class Main {
final private int BUFFER_SIZE = 1 << 16;
private byte[] buffer;
private int bufferPointer, bytesRead;
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}
byte[] buf = new byte[64]; // line length
int cnt = 0, c;
while ((c = read()) != -1) {
if (c == '\n')
break;
buf[cnt++] = (byte) c;
}
return new String(buf,
0, cnt
); }
byte[] buf = new byte[64]; // line length
int cnt = 0, c;
while ((c = read()) != -1) {
if (c == ' ')
break;
buf[cnt++] = (byte) c;
}
return new String(buf,
0, cnt
); }
int ret = 0;
byte c = read();
while (c <= ' ')
c = read();
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (neg)
return -ret;
return ret;
}
long ret = 0;
byte c = read();
while (c <= ' ')
c = read();
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (neg)
return -ret;
return ret;
}
double ret = 0, div = 1;
byte c = read();
while (c <= ' ')
c = read();
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (c == '.') {
while ((c = read()) >= '0' && c <= '9') {
ret += (c - '0') / (div *= 10);
}
}
if (neg)
return -ret;
return ret;
}
bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
if (bytesRead == -1)
buffer[0] = -1;
}
if (bufferPointer == bytesRead)
fillBuffer();
return buffer[bufferPointer++];
}
if (din == null)
return;
din.close();
}
}
int t = s.nextInt();
long sum = 0, a, b, c, d, med, z; int n;
while (t > 0) {
t--;
PriorityQueue<Long> max = new PriorityQueue<>(new Compare1());
PriorityQueue<Long> min = new PriorityQueue<>();
a = s.nextLong();
b = s.nextLong();
c = s.nextLong();
n = s.nextInt();
d = b;
sum = 1;
max.add(1l);
b += d;
for(int i = 2; i <= n; i++) {
int mxs = max.size(), mis = min.size();
long mxp = max.peek();
long mip = -1l;
if(mis != 0) mip = min.peek();
med = mxp;
z = ((a * med) + b + c) % 1000000007;
b += d;
//if(i == 1) z = 1;
sum += z;
if(mxs == mis) {
if(mis == 0) max.add(z);
else if(mxp <= z && mip >= z) {
max.add(z);
}
else if(mip < z) {
max.add(min.poll());
min.add(z);
}
else {
max.add(z);
}
}
else {
if(mis == 0) {
if(mxp <= z) min.add(z);
else {
min.add(max.poll());
max.add(z);
}
}
else if(mxp <= z) {
min.add(z);
}
else {
min.add(max.poll());
max.add(z);
}
}
}
max = null; min = null;
sb.append(sum + "\n");
}
out.print(sb);
out.flush();
}
}
class Compare1 implements Comparator<Long>{
@Override
return (p1 - p2 > 0) ? -1 : 1;
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoJc3RhdGljIGNsYXNzIFJlYWRlciB7CgkJZmluYWwgcHJpdmF0ZSBpbnQgQlVGRkVSX1NJWkUgPSAxIDw8IDE2OwoJCXByaXZhdGUgRGF0YUlucHV0U3RyZWFtIGRpbjsKCQlwcml2YXRlIGJ5dGVbXSBidWZmZXI7CgkJcHJpdmF0ZSBpbnQgYnVmZmVyUG9pbnRlciwgYnl0ZXNSZWFkOwoKCQlwdWJsaWMgUmVhZGVyKCkgewoJCQlkaW4gPSBuZXcgRGF0YUlucHV0U3RyZWFtKFN5c3RlbS5pbik7CgkJCWJ1ZmZlciA9IG5ldyBieXRlW0JVRkZFUl9TSVpFXTsKCQkJYnVmZmVyUG9pbnRlciA9IGJ5dGVzUmVhZCA9IDA7CgkJfQoKCQlwdWJsaWMgUmVhZGVyKFN0cmluZyBmaWxlX25hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJCWRpbiA9IG5ldyBEYXRhSW5wdXRTdHJlYW0obmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlX25hbWUpKTsKCQkJYnVmZmVyID0gbmV3IGJ5dGVbQlVGRkVSX1NJWkVdOwoJCQlidWZmZXJQb2ludGVyID0gYnl0ZXNSZWFkID0gMDsKCQl9CgoJCXB1YmxpYyBTdHJpbmcgbmV4dExpbmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNjRdOyAvLyBsaW5lIGxlbmd0aAoJCQlpbnQgY250ID0gMCwgYzsKCQkJd2hpbGUgKChjID0gcmVhZCgpKSAhPSAtMSkgewoJCQkJaWYgKGMgPT0gJ1xuJykKCQkJCQlicmVhazsKCQkJCWJ1ZltjbnQrK10gPSAoYnl0ZSkgYzsKCQkJfQoJCQlyZXR1cm4gbmV3IFN0cmluZyhidWYsIDAsIGNudCk7CgkJfQoKCQlwdWJsaWMgU3RyaW5nIG5leHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNjRdOyAvLyBsaW5lIGxlbmd0aAoJCQlpbnQgY250ID0gMCwgYzsKCQkJd2hpbGUgKChjID0gcmVhZCgpKSAhPSAtMSkgewoJCQkJaWYgKGMgPT0gJyAnKQoJCQkJCWJyZWFrOwoJCQkJYnVmW2NudCsrXSA9IChieXRlKSBjOwoJCQl9CgkJCXJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgMCwgY250KTsKCQl9CgoJCXB1YmxpYyBpbnQgbmV4dEludCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJCWludCByZXQgPSAwOwoJCQlieXRlIGMgPSByZWFkKCk7CgkJCXdoaWxlIChjIDw9ICcgJykKCQkJCWMgPSByZWFkKCk7CgkJCWJvb2xlYW4gbmVnID0gKGMgPT0gJy0nKTsKCQkJaWYgKG5lZykKCQkJCWMgPSByZWFkKCk7CgkJCWRvIHsKCQkJCXJldCA9IHJldCAqIDEwICsgYyAtICcwJzsKCQkJfSB3aGlsZSAoKGMgPSByZWFkKCkpID49ICcwJyAmJiBjIDw9ICc5Jyk7CgoJCQlpZiAobmVnKQoJCQkJcmV0dXJuIC1yZXQ7CgkJCXJldHVybiByZXQ7CgkJfQoKCQlwdWJsaWMgbG9uZyBuZXh0TG9uZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJCWxvbmcgcmV0ID0gMDsKCQkJYnl0ZSBjID0gcmVhZCgpOwoJCQl3aGlsZSAoYyA8PSAnICcpCgkJCQljID0gcmVhZCgpOwoJCQlib29sZWFuIG5lZyA9IChjID09ICctJyk7CgkJCWlmIChuZWcpCgkJCQljID0gcmVhZCgpOwoJCQlkbyB7CgkJCQlyZXQgPSByZXQgKiAxMCArIGMgLSAnMCc7CgkJCX0gd2hpbGUgKChjID0gcmVhZCgpKSA+PSAnMCcgJiYgYyA8PSAnOScpOwoJCQlpZiAobmVnKQoJCQkJcmV0dXJuIC1yZXQ7CgkJCXJldHVybiByZXQ7CgkJfQoKCQlwdWJsaWMgZG91YmxlIG5leHREb3VibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCQlkb3VibGUgcmV0ID0gMCwgZGl2ID0gMTsKCQkJYnl0ZSBjID0gcmVhZCgpOwoJCQl3aGlsZSAoYyA8PSAnICcpCgkJCQljID0gcmVhZCgpOwoJCQlib29sZWFuIG5lZyA9IChjID09ICctJyk7CgkJCWlmIChuZWcpCgkJCQljID0gcmVhZCgpOwoKCQkJZG8gewoJCQkJcmV0ID0gcmV0ICogMTAgKyBjIC0gJzAnOwoJCQl9IHdoaWxlICgoYyA9IHJlYWQoKSkgPj0gJzAnICYmIGMgPD0gJzknKTsKCgkJCWlmIChjID09ICcuJykgewoJCQkJd2hpbGUgKChjID0gcmVhZCgpKSA+PSAnMCcgJiYgYyA8PSAnOScpIHsKCQkJCQlyZXQgKz0gKGMgLSAnMCcpIC8gKGRpdiAqPSAxMCk7CgkJCQl9CgkJCX0KCgkJCWlmIChuZWcpCgkJCQlyZXR1cm4gLXJldDsKCQkJcmV0dXJuIHJldDsKCQl9CgoJCXByaXZhdGUgdm9pZCBmaWxsQnVmZmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKCQkJYnl0ZXNSZWFkID0gZGluLnJlYWQoYnVmZmVyLCBidWZmZXJQb2ludGVyID0gMCwgQlVGRkVSX1NJWkUpOwoJCQlpZiAoYnl0ZXNSZWFkID09IC0xKQoJCQkJYnVmZmVyWzBdID0gLTE7CgkJfQoKCQlwcml2YXRlIGJ5dGUgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJCWlmIChidWZmZXJQb2ludGVyID09IGJ5dGVzUmVhZCkKCQkJCWZpbGxCdWZmZXIoKTsKCQkJcmV0dXJuIGJ1ZmZlcltidWZmZXJQb2ludGVyKytdOwoJCX0KCgkJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCQlpZiAoZGluID09IG51bGwpCgkJCQlyZXR1cm47CgkJCWRpbi5jbG9zZSgpOwoJCX0KCX0KCglzdGF0aWMgUmVhZGVyIHMgPSBuZXcgUmVhZGVyKCk7CglzdGF0aWMgUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpOwoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJaW50IHQgPSBzLm5leHRJbnQoKTsKCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgkJbG9uZyBzdW0gPSAwLCBhLCBiLCBjLCBkLCBtZWQsIHo7IGludCBuOwoJCXdoaWxlICh0ID4gMCkgewoJCQl0LS07CgkJCVByaW9yaXR5UXVldWU8TG9uZz4gbWF4ID0gbmV3IFByaW9yaXR5UXVldWU8PihuZXcgQ29tcGFyZTEoKSk7CgkJCVByaW9yaXR5UXVldWU8TG9uZz4gbWluID0gbmV3IFByaW9yaXR5UXVldWU8PigpOwoJCQlhID0gcy5uZXh0TG9uZygpOwoJCQliID0gcy5uZXh0TG9uZygpOwoJCQljID0gcy5uZXh0TG9uZygpOwoJCQluID0gcy5uZXh0SW50KCk7CgkJCWQgPSBiOwoJCQlzdW0gPSAxOwoJCQltYXguYWRkKDFsKTsKCQkJYiArPSBkOwoJCQlmb3IoaW50IGkgPSAyOyBpIDw9IG47IGkrKykgewoJCQkJaW50IG14cyA9IG1heC5zaXplKCksIG1pcyA9IG1pbi5zaXplKCk7CgkJCQlsb25nIG14cCA9IG1heC5wZWVrKCk7IAoJCQkJbG9uZyBtaXAgPSAtMWw7CgkJCQlpZihtaXMgIT0gMCkgbWlwID0gbWluLnBlZWsoKTsKCQkJCW1lZCA9IG14cDsKCQkJCXogPSAoKGEgKiBtZWQpICsgYiArIGMpICUgMTAwMDAwMDAwNzsKCQkJCWIgKz0gZDsKCQkJCS8vaWYoaSA9PSAxKSB6ID0gMTsKCQkJCXN1bSArPSB6OwoJCQkJaWYobXhzID09IG1pcykgewoJCQkJCWlmKG1pcyA9PSAwKSBtYXguYWRkKHopOwoJCQkJCWVsc2UgaWYobXhwIDw9IHogJiYgbWlwID49IHopIHsKCQkJCQkJbWF4LmFkZCh6KTsKCQkJCQl9CgkJCQkJZWxzZSBpZihtaXAgPCB6KSB7CgkJCQkJCW1heC5hZGQobWluLnBvbGwoKSk7CgkJCQkJCW1pbi5hZGQoeik7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQltYXguYWRkKHopOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCWlmKG1pcyA9PSAwKSB7CgkJCQkJCWlmKG14cCA8PSB6KSBtaW4uYWRkKHopOwoJCQkJCQllbHNlIHsKCQkJCQkJCW1pbi5hZGQobWF4LnBvbGwoKSk7CgkJCQkJCQltYXguYWRkKHopOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgaWYobXhwIDw9IHopIHsKCQkJCQkJbWluLmFkZCh6KTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCW1pbi5hZGQobWF4LnBvbGwoKSk7CgkJCQkJCW1heC5hZGQoeik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCW1heCA9IG51bGw7IG1pbiA9IG51bGw7CgkJCXNiLmFwcGVuZChzdW0gKyAiXG4iKTsKCQl9CgkJb3V0LnByaW50KHNiKTsKCQlvdXQuZmx1c2goKTsKCX0KCn0KCgpjbGFzcyBDb21wYXJlMSBpbXBsZW1lbnRzIENvbXBhcmF0b3I8TG9uZz57CgoJQE92ZXJyaWRlCglwdWJsaWMgaW50IGNvbXBhcmUoTG9uZyBwMSwgTG9uZyBwMikgewoJCXJldHVybiAocDEgLSBwMiA+IDApID8gLTEgOiAxOwoJfQp9