def pow(x, n, mod)
  ans = 1
  while n > 0
    ans = ans * x % mod if n.odd?
    x = x * x % mod
    n >>= 1
  end
  ans
end

def calc(a, b, d, n, mod)
  return 0 if n == 0
  acs, bcs, ms = [0, 0, 0]
  aa, bb, m = [0, 0, 0]
  while n > 0 do
    aa, bb, m = calc2(aa, bb, m, aa, bb, m, d, mod)
    aa, bb, m = [1, 0, 1] if m == 0
    acs, bcs, ms = calc2(aa, bb, m, acs, bcs, ms, d, mod) if n.odd?
    n >>= 1
  end
  (acs * a + bcs * b) % mod
end

def calc2(ac1, bc1, m1, ac2, bc2, m2, d, mod)
  [((pow(10, d * m2, mod) * ac1) % mod + ac2) % mod, ((pow(10, d * m2, mod) * bc1) % mod + ((m1 * ac2) % mod) + bc2) % mod, m1 + m2]
end

L, A, B, M = gets.chomp.split(" ").map(&:to_i)

E = []
a = Math.log10(A+1).ceil
s, i = [0, -1]
while(s < L) do
  s = ((10 ** a) - A - 1) / B
  E << (s >= L ? [a, L - 1, (L - 1 - i) * a] : [a, s, (s - i) * a])
  a += 1
  i = s
end

l = -1
ans = 0
E.each{|e|
  a, d, n, l = [A + (l + 1) * B, e[0], e[1] - l, e[1]]
  z = E.select{|e| e[0] > d}.inject(0){|rst, e| rst + e[2]}
  ans = ((calc(a, B, d, n, M) * pow(10, z, M)) % M + ans) % M
}

puts (ans % M)
