#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>

using namespace std;

vector<int> to_vec(int a,int d,int N,int M){
  vector<int> v{a};
  for(int i=0;i<N-1;i++){
    a=(a*58+d)%(M+1);
    v.push_back(a);
  }
  sort(begin(v),end(v));
  return v;
}

int main(){
  int M,N,m0,md,n0,nd;
  cin>>M>>N>>m0>>md>>n0>>nd;
  auto vm=to_vec(m0,md,M,N);
  auto vn=to_vec(n0,nd,N,M);
  long long ans=1e18;
  int rx=N;
  long long l=0,r=accumulate(begin(vn),end(vn),0LL);
  for(int i=0;;i++){
    for(;rx;){
      long long c=l+r+(M-i)*1LL*(N-rx);
      long long n=l+r-vn[rx-1]+(M-i)*1LL*(N-rx+1);
      if(n>c)break;
      rx--;
      r-=vn[rx];
    }
    ans=min(ans,l+r+(M-i)*1LL*(N-rx));
    if(i==M)break;
    l+=vm[i];
  }
  cout<<ans<<endl;
}
### Prompt

Generate a Cpp solution to the following problem:

Example

Input

2 3 1 3 1 0


Output

2

### Response

```cpp
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>

using namespace std;

vector<int> to_vec(int a,int d,int N,int M){
  vector<int> v{a};
  for(int i=0;i<N-1;i++){
    a=(a*58+d)%(M+1);
    v.push_back(a);
  }
  sort(begin(v),end(v));
  return v;
}

int main(){
  int M,N,m0,md,n0,nd;
  cin>>M>>N>>m0>>md>>n0>>nd;
  auto vm=to_vec(m0,md,M,N);
  auto vn=to_vec(n0,nd,N,M);
  long long ans=1e18;
  int rx=N;
  long long l=0,r=accumulate(begin(vn),end(vn),0LL);
  for(int i=0;;i++){
    for(;rx;){
      long long c=l+r+(M-i)*1LL*(N-rx);
      long long n=l+r-vn[rx-1]+(M-i)*1LL*(N-rx+1);
      if(n>c)break;
      rx--;
      r-=vn[rx];
    }
    ans=min(ans,l+r+(M-i)*1LL*(N-rx));
    if(i==M)break;
    l+=vm[i];
  }
  cout<<ans<<endl;
}
```