#include<bits/stdc++.h>
using namespace std;

using ll=long long;
int main(){
    int n,m;
    cin>>m>>n;
    int m0,md,n0,nd;
    cin>>m0>>md>>n0>>nd;
    vector<int> car(m);
    vector<int> kiw(n);
    auto create=[](vector<int>& vec,int v0,int d,int mod){
        vec[0]=v0;
        for(int i=1;i<vec.size();i++){
            vec[i]=(vec[i-1]*58+d)%mod;
        }
    };
    create(car,m0,md,n+1);
    create(kiw,n0,nd,m+1);

    sort(kiw.rbegin(),kiw.rend());
    vector<int> d(n);
    for(int i=0;i<n-1;i++){
        d[i]=kiw[i]-kiw[i+1];
    }
    d[n-1]=kiw[n-1];

    set<int> pos;
    for(int i=0;i<n;i++) if(d[i]) pos.insert(i);
        
    ll res=0;
    for(int i=0;i<m;i++){
        auto bit=pos.lower_bound(car[i]-1);
        vector<int> eraser;
        if(bit!=pos.end()){
            int v=*bit;
            if(bit==pos.begin()){
                if(v-car[i]>=0){
                    d[v-car[i]]++;
                    pos.insert(v-car[i]);
                }
                if((--d[v])==0){
                    pos.erase(v);
                }
            }
            else{
                int f=*prev(bit);
                int k=car[i]-f-1;
                if((--d[f])==0){
                    pos.erase(f);
                }
                if((--d[v])==0){
                    pos.erase(v);
                }
                d[v-k]++;
                pos.insert(v-k);
            }
            res+=car[i];
        }
        else if(bit!=pos.begin()){
            auto fit=prev(bit);
            int v=*fit;
            res+=v+1;
            if((--d[v])==0){
                pos.erase(v);
            }
        }
    }
    cout<<res<<endl;
    return 0;
}

### Prompt

In Cpp, your task is to solve the following problem:

Example

Input

2 3 1 3 1 0


Output

2

### Response

```cpp
#include<bits/stdc++.h>
using namespace std;

using ll=long long;
int main(){
    int n,m;
    cin>>m>>n;
    int m0,md,n0,nd;
    cin>>m0>>md>>n0>>nd;
    vector<int> car(m);
    vector<int> kiw(n);
    auto create=[](vector<int>& vec,int v0,int d,int mod){
        vec[0]=v0;
        for(int i=1;i<vec.size();i++){
            vec[i]=(vec[i-1]*58+d)%mod;
        }
    };
    create(car,m0,md,n+1);
    create(kiw,n0,nd,m+1);

    sort(kiw.rbegin(),kiw.rend());
    vector<int> d(n);
    for(int i=0;i<n-1;i++){
        d[i]=kiw[i]-kiw[i+1];
    }
    d[n-1]=kiw[n-1];

    set<int> pos;
    for(int i=0;i<n;i++) if(d[i]) pos.insert(i);
        
    ll res=0;
    for(int i=0;i<m;i++){
        auto bit=pos.lower_bound(car[i]-1);
        vector<int> eraser;
        if(bit!=pos.end()){
            int v=*bit;
            if(bit==pos.begin()){
                if(v-car[i]>=0){
                    d[v-car[i]]++;
                    pos.insert(v-car[i]);
                }
                if((--d[v])==0){
                    pos.erase(v);
                }
            }
            else{
                int f=*prev(bit);
                int k=car[i]-f-1;
                if((--d[f])==0){
                    pos.erase(f);
                }
                if((--d[v])==0){
                    pos.erase(v);
                }
                d[v-k]++;
                pos.insert(v-k);
            }
            res+=car[i];
        }
        else if(bit!=pos.begin()){
            auto fit=prev(bit);
            int v=*fit;
            res+=v+1;
            if((--d[v])==0){
                pos.erase(v);
            }
        }
    }
    cout<<res<<endl;
    return 0;
}

```