#include #include using namespace std; using namespace atcoder; using mint = modint1000000007; using vec = vector; using matrix = vector; matrix operator*(const matrix &a, const matrix &b) { const int n = a.size(); matrix c(n, vec(n)); for (int i = 0; i < n; i++) { for (int k = 0; k < n; k++) { for (int j = 0; j < n; j++) { c.at(i).at(j) += a.at(i).at(k) * b.at(k).at(j); } } } return c; } matrix matpow(matrix a, int64_t k) { const int n = a.size(); matrix res(n, vec(n)); for (int i = 0; i < n; i++) { res.at(i).at(i) = 1; } while (k) { if (k & 1) { res = res * a; } a = a * a; k >>= 1; } return res; } int main() { int64_t a, b, n; cin >> a >> b >> n; for (int i = 0; i < n; i++) { int64_t t; cin >> t; matrix mat(3, vec(3)), fst(3, vec(3)); mat[0][0] = a; mat[0][1] = 1; mat[1][0] = b; mat[2][0] = 1; fst[0][0] = 1; fst[1][1] = 1; fst[0][2] = a; fst[1][2] = b; matrix newmat = matpow(mat, t / 2); if (t % 2) { newmat = newmat * fst; } mint ans = 0; for (int j = 0; j < 2; j++) { for (int k = 0; k < 3; k++) { ans += newmat[j][k]; } } cout << ans.val() << endl; } return 0; }