#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;

int p, q, r;
long long pocetak, kraj;

void Unos()
{
	cin >> p >> q >> r;
	cin >> pocetak >> kraj;
}

void Rastavi(int broj, unordered_map<int, int>* cinioci)
{
	int broj_cinioca = 0;
	while (broj % 2 == 0)
	{
		broj_cinioca++;
		broj = broj / 2;
	}
	if(broj_cinioca > 0)
	{
		(*cinioci)[2] = max((*cinioci)[2], broj_cinioca);
	}

	for (int i = 3; i <= sqrt(broj); i += 2)
	{
		broj_cinioca = 0;
		while (broj % i == 0)
		{
			broj_cinioca++;
			broj = broj / i;
		}
		(*cinioci)[i] = max((*cinioci)[i], broj_cinioca);
	}

	if (broj > 2)
	{
		(*cinioci)[broj] = max((*cinioci)[broj], 1);
	}
}

int Nzs(int x, int y, int z)
{
	unordered_map<int, int> cinioci;

	Rastavi(max(x, max(y, z)), &cinioci);
	Rastavi((x + y + z) - max(x, max(y, z)) - min(x, min(y, z)), &cinioci);
	Rastavi(min(x, min(y, z)), &cinioci);

	int proizvod = 1;
	for (pair<int, int> cinilac: cinioci)
	{
		proizvod *= cinilac.first * cinilac.second;
	}
	return proizvod;
}

long long Brutus()
{
	long long granica = Nzs(p, q, r) + 1;

	long long rezultat = 0;
	if (kraj > granica)
	{
		rezultat += (kraj - max(granica, (pocetak - 1)));
	}
	for (long long broj = pocetak; broj < min(granica + 1, kraj + 1); broj++)
	{
		int rem = 0;
		if (broj % p != 0)
			rem++;
		if (broj % q != 0)
			rem++;
		if (broj % r != 0)
			rem++;
		if (broj / p + broj / q + broj / r + rem <= broj)
		{
			rezultat++;
		}
	}
	return rezultat;
}

int main()
{
	Unos();

	double zbir = 1 / (double)p + 1 / (double)q + 1 / (double)r;
	if (zbir >= 0.999999999999 && zbir < 1)
	{
		zbir = 1;
	}

	if (zbir > 1)
	{
		cout << 0;
	}
	else if(zbir == 1)
	{
		cout << (kraj - pocetak + 1) / Nzs(p, q, r);
	}
	else
	{
		cout << Brutus();
	}
}