n, a, b, md = gets.split.map(&:to_i)

def getlen(a)
  res = 0
  while a > 0
    res += 1
    a /= 10
  end
  res
end

def modpow(a, b, md)
  res = 1
  while b > 0 
    if b.odd? 
      res = res * a % md
    end
    a = a * a % md
    b /= 2
  end
  res
end

def modpowsum(r, n, md)
  return 0 if n == 0
  if n.odd?
    return (1 + modpowsum(r, n - 1, md) * r) % md
  end
  x = modpowsum(r, n / 2, md)
  return x * (1 + modpow(r, n / 2, md)) % md
end

def modpowsum2(r, n, md)
  if n == 0
    return 0
  end
  if n.odd?
    return (n - 1 + modpowsum2(r, n - 1, md) * r) % md
  end
  x = modpowsum2(r, n / 2, md)
  return (x * modpow(r, n / 2, md) + x + modpowsum(r, n / 2, md) * n / 2) % md
end

k = 0
ans = 0

while k < n
  l = k
  r = n
  while r - l > 1
    m = (l + r) / 2
    if getlen(a + m * b) == getlen(a + k * b)
      l = m
    else
      r = m
    end
  end
  len = getlen(a + k * b) * (r - k)
  ans = ans * modpow(10, len, md) % md

  x = modpow(10, getlen(a + k * b), md)
  ans += (a + b * k) * modpowsum(x, r - k, md)
  ans += b * modpowsum2(x, r - k, md)
# a * modpowsum(x, r - k, md) + b * modpowsum2(x, r - k
  ans %= md
  k = r
end

puts ans

