import sys input = sys.stdin.readline N,W=list(map(int,input().split())) X=list(map(int,input().split())) Y=list(map(int,input().split())) # エラトステネスの篩を用いた素因数分解・約数列挙 MAX=5*10**5+10 # 使いたい最大値を指定 # 線形篩。エラトステネスの篩を線形にできる。 Sieve=[-1]*MAX Primes=[] for i in range(2,MAX): if Sieve[i]==-1: Primes.append(i) Sieve[i]=i for p in Primes: if p*i>=MAX or p>Sieve[i]: break else: Sieve[p*i]=p # 素因数分解 def fact(x): D=dict() while x!=1: k=Sieve[x] if k in D: D[k]+=1 else: D[k]=1 x//=k return D # 約数列挙 def faclist(x): LIST=[1] while x!=1: k=Sieve[x] count=0 while x%k==0: count+=1 x//=k LIST2=[] for l in LIST: for i in range(1,count+1): LIST2.append(l*k**i) LIST+=LIST2 return LIST LIST=[[] for i in range(200001)] for i in range(N): for k in faclist(X[i]): LIST[k].append(Y[i]) OK=[0]*200001 LANS=0 for i in range(W,200001): if OK[i]==1: continue w=i for j in range(w,200001,w): OK[j]=1 ANS=0 for c in LIST[w]: ANS+=c LANS=max(LANS,ANS) print(LANS)