#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD=1e9+7;
int a,b,c,d,nn,mm,nnn,mmm;
string n,m;
struct Mx
{
int r,c,a[3][3];
friend Mx operator*(const Mx &A,const Mx &B)
{
Mx C;C.r=A.r,C.c=B.c;
for(int i=1;i<=C.r;i++)
for(int j=1;j<=C.c;j++)
C.a[i][j]=0;
for(int k=1;k<=A.c;k++)
for(int i=1;i<=C.r;i++)
for(int j=1;j<=C.c;j++)
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j]%MOD)%MOD;
return C;
}
}A,B,F,C,I;
Mx ksm(Mx AA,int x)
{
Mx res=I;
for(;x;x>>=1,AA=AA*AA)
if(x&1) res=res*AA;
return res;
}
int jian(int x,int y)
{
if(x<y) return x-y+MOD-1;
return x-y;
}
signed main()
{
cin>>n>>m>>a>>b>>c>>d;
for(int i=0;i<n.size();i++)
{
nn=(nn*10%(MOD-1)+n[i]-'0')%(MOD-1);
nnn=(nnn*10%MOD+n[i]-'0')%MOD;
}
for(int i=0;i<m.size();i++)
{
mmm=(mmm*10%MOD+m[i]-'0')%MOD;
mm=(mm*10%(MOD-1)+m[i]-'0')%(MOD-1);
}
I.r=I.c=2,I.a[1][1]=I.a[2][2]=1;
A.r=A.c=B.r=B.c=F.r=2,F.c=1;
A.a[1][1]=a,A.a[1][2]=b,A.a[2][2]=1;
B.a[1][1]=c,B.a[1][2]=d,B.a[2][2]=1;
F.a[1][1]=F.a[2][1]=1;
F=ksm(ksm(A,jian(mm,1))*B,jian(nn,1))*ksm(A,jian(mm,1))*F;
cout<<F.a[1][1];
return 0;
}