#![allow(dead_code, unused_imports, unused_macros, non_snake_case)] fn main() { input! { N: usize, W: usize, X: [usize; N], Y: [i64; N], } let max = (*X.iter().max().unwrap()).max(W); let mut value = vec![0; max + 1]; for i in 0 .. N { value[X[i]] += Y[i]; } // dp[i] = i が約数になる value の和の最大 let mut dp = vec![0; max + 1]; for i in 1 ..= max { for j in (i ..= max).step_by(i) { dp[i] += value[j]; } } let mut ans = 0; for i in W ..= max { ans = ans.max(dp[i]); } println!("{ans}"); } use proconio::input;