#R, 102, 91, 81 bytes
R, 102, 91, 81 bytes
f=function(b,v,s=table(v))(477*any(s>3)+b+10*all(s<2))%/%100+sum(s==2)+3*any(s>2)
Managed to drop 11 bytes (and fix a bug) thanks to @Giuseppe. Managed a further 10 inspired by by @Giuseppe's /10 idea.
Ungolfed
f=function(b,v){
s = table(v) #included in fn inputs
a = b+10*all(s<2) #covers all different case
a = a+477*any(s>3) #Covers 4 of a kind
d = sum(s==2)+3*any(s>2) #covers 1 and 2 pair, 3 of a kind.
a%/%100+d #sum appropriate values
}