#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef unsigned int uint;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<bool> vb;
typedef vector<vll> vvll;
typedef vector<vector<char>> vvc;
#define int ll
#define sz(s) (ll)s.size()
#define all(s) (s).begin(),(s).end()
#define rall(s) (s).begin(),(s).end(),greater<>()
#define ln '\n'
#define rtv(n) return void(cout<<n)
#define fixset(n) cout<<fixed<<setprecision(n)
#define getunique(v){sort(all(v));v.erase(unique(all(v)), v.end());}
#define input(a) for(auto&it:a)cin>>it;
#define print(a) for(auto&it:a)cout<<it<<" ";cout<<ln;
const int MOD = 1e9 + 7;
const int MX = 2e5 + 5;
void Sayman369() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
void file() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
// freopen("mex.in", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
}
void preprocessing() {
}
template <class T>
using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
// less: it is the basic for comparison of two function. Use less_equal for ordered multiset.
// order_of_key(k): Number of items strictly smaller than k
// find_by_order(k): kth element in a set (counting from zero)
ll add(int a, int b, int m) {
return ((a % m) + (b % m)) % m;
}
ll mul(int a, int b, int m) {
return ((a % m) * (b % m)) % m;
}
void solve(int tc) {
int a, b, c, n;
cin >> a >> b >> c >> n;
ordered_set<int> st;
vll f(n + 1);
f[1] = 1;
st.insert(f[1]);
for (int i = 2; i <= n; i++) {
int x = *st.find_by_order(sz(st) / 2 - !(sz(st) & 1));
f[i] = ((a * x) + (b * i) + c);
if (f[i] >= MOD)f[i] -= MOD;
st.insert(f[i]);
}
cout << accumulate(all(f), 0ll) << ln;
}
signed main() {
Sayman369();
file();
preprocessing();
int tc = 1;
cin >> tc;
for (int i = 1; i <= tc; i++) {
solve(i);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgdmVjdG9yPGxsPiB2bGw7CnR5cGVkZWYgdmVjdG9yPGNoYXI+IHZjOwp0eXBlZGVmIHZlY3Rvcjxib29sPiB2YjsKdHlwZWRlZiB2ZWN0b3I8dmxsPiB2dmxsOwp0eXBlZGVmIHZlY3Rvcjx2ZWN0b3I8Y2hhcj4+IHZ2YzsKCgojZGVmaW5lIGludCBsbAojZGVmaW5lIHN6KHMpIChsbClzLnNpemUoKQojZGVmaW5lIGFsbChzKSAocykuYmVnaW4oKSwocykuZW5kKCkKI2RlZmluZSByYWxsKHMpIChzKS5iZWdpbigpLChzKS5lbmQoKSxncmVhdGVyPD4oKQojZGVmaW5lIGxuICdcbicKI2RlZmluZSBydHYobikgcmV0dXJuIHZvaWQoY291dDw8bikKI2RlZmluZSBmaXhzZXQobikgY291dDw8Zml4ZWQ8PHNldHByZWNpc2lvbihuKQojZGVmaW5lIGdldHVuaXF1ZSh2KXtzb3J0KGFsbCh2KSk7di5lcmFzZSh1bmlxdWUoYWxsKHYpKSwgdi5lbmQoKSk7fQojZGVmaW5lIGlucHV0KGEpIGZvcihhdXRvJml0OmEpY2luPj5pdDsKI2RlZmluZSBwcmludChhKSBmb3IoYXV0byZpdDphKWNvdXQ8PGl0PDwiICI7Y291dDw8bG47CgoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBNWCA9IDJlNSArIDU7CgoKdm9pZCBTYXltYW4zNjkoKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKfQoKdm9pZCBmaWxlKCkgewojaWZkZWYgTE9DQUwKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2Vsc2UKICAgIC8vICAgICAgICBmcmVvcGVuKCJtZXguaW4iLCAiciIsIHN0ZGluKTsKICAgIC8vICAgICAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKfQoKCnZvaWQgcHJlcHJvY2Vzc2luZygpIHsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgp1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKLy8gbGVzczogaXQgaXMgdGhlIGJhc2ljIGZvciBjb21wYXJpc29uIG9mIHR3byBmdW5jdGlvbi4gVXNlIGxlc3NfZXF1YWwgZm9yIG9yZGVyZWQgbXVsdGlzZXQuCi8vIG9yZGVyX29mX2tleShrKTogTnVtYmVyIG9mIGl0ZW1zIHN0cmljdGx5IHNtYWxsZXIgdGhhbiBrCi8vIGZpbmRfYnlfb3JkZXIoayk6IGt0aCBlbGVtZW50IGluIGEgc2V0IChjb3VudGluZyBmcm9tIHplcm8pCgpsbCBhZGQoaW50IGEsIGludCBiLCBpbnQgbSkgewogICAgcmV0dXJuICgoYSAlIG0pICsgKGIgJSBtKSkgJSBtOwp9CgpsbCBtdWwoaW50IGEsIGludCBiLCBpbnQgbSkgewogICAgcmV0dXJuICgoYSAlIG0pICogKGIgJSBtKSkgJSBtOwp9Cgp2b2lkIHNvbHZlKGludCB0YykgewogICAgaW50IGEsIGIsIGMsIG47CiAgICBjaW4gPj4gYSA+PiBiID4+IGMgPj4gbjsKICAgIG9yZGVyZWRfc2V0PGludD4gc3Q7CiAgICB2bGwgZihuICsgMSk7CiAgICBmWzFdID0gMTsKICAgIHN0Lmluc2VydChmWzFdKTsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkrKykgewogICAgICAgIGludCB4ID0gKnN0LmZpbmRfYnlfb3JkZXIoc3ooc3QpIC8gMiAtICEoc3ooc3QpICYgMSkpOwogICAgICAgIGZbaV0gPSAoKGEgKiB4KSArIChiICogaSkgKyBjKTsKICAgICAgICBpZiAoZltpXSA+PSBNT0QpZltpXSAtPSBNT0Q7CiAgICAgICAgc3QuaW5zZXJ0KGZbaV0pOwogICAgfQogICAgY291dCA8PCBhY2N1bXVsYXRlKGFsbChmKSwgMGxsKSA8PCBsbjsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBTYXltYW4zNjkoKTsKICAgIGZpbGUoKTsKICAgIHByZXByb2Nlc3NpbmcoKTsKICAgIGludCB0YyA9IDE7CiAgICBjaW4gPj4gdGM7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSB0YzsgaSsrKSB7CiAgICAgICAgc29sdmUoaSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K