using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class Program { static void Main(string[] args) { //入力 long N = long.Parse(Console.ReadLine()); string s = Console.ReadLine(); long a = long.Parse(s.Split(' ')[0]); long b = long.Parse(s.Split(' ')[1]); long c = long.Parse(s.Split(' ')[2]); //回答となる数値 long ans = 0; long a_num = 0; //aの倍数の個数 long b_num = 0; //bの倍数の個数 long c_num = 0; //cの倍数の個数 long a_b_num = 0; long b_c_num = 0; long c_a_num = 0; long a_b_c_num = 0; //検証 a_num = N / a; b_num = N / b; c_num = N / c; a_b_num = N / LCM(a, b); b_c_num = N / LCM(b, c); c_a_num = N / LCM(c, a); a_b_c_num = N / LCM(LCM(a, b), c); ans = a_num + b_num + c_num - (a_b_num + b_c_num + c_a_num) + a_b_c_num; //出力 Console.WriteLine(ans); } //ユークリッドの互除法 public static long GCD(long a, long b) { if (a < b) { return GCD(b, a); } while (b != 0) { long amari = a % b; a = b; b = amari; } return a; } //最小公倍数を求める public static long LCM(long a, long b) { return a * b / GCD(a, b); } }