#include<bits/stdc++.h>
using namespace std;
long long mx(long long l1,long long r1,long long l2,long long r2){
return max(0LL,min(r1,r2)-max(l1,l2)+1);
}
int main(){
long long l1,r1,t1,l2,r2,t2;
while(~scanf("%lld%lld%lld%lld%lld%lld",&l1,&r1,&t1,&l2,&r2,&t2)){
l1++;//从0开始加一变为从1开始
r1++;
l2++;
r2++;
long long mnsuojin=__gcd(t1,t2);//有最大公约数又对不齐会导致一直对不齐(某些情况),mnsuojin是可移动的最小距离
long long daierta=abs(r1-r2)/mnsuojin*mnsuojin;//避免超时所以一步到位
long long ans=0;
if(r1==r2)
ans=mx(l1,r1,l2,r2);
else if(r1<r2){
r1+=daierta;
l1+=daierta;
ans=max(mx(l1,r1,l2,r2),mx(l1+mnsuojin,r1+mnsuojin,l2,r2));//前者和后者必定存在一个最优解
}
else if(r1>r2){
r2+=daierta;
l2+=daierta;
ans=max(mx(l1,r1,l2,r2),mx(l1,r1,l2+mnsuojin,r2+mnsuojin));
}
printf("%lld
",ans);
}
return 0;
}