package main
import (
"fmt"
"strings"
)
func main() {
var s,p string
fmt.Scan(&s)
fmt.Scan(&p)
s = strings.ToLower(s)
p = strings.ToLower(p)
n,m := len(s), len(p)
f := make([][]bool, n+1)
for i:=0;i<=n;i++{
f[i] = make([]bool, m+1)
}
for i := 0;i<n;i++{
if s[i]=='*'{
f[i+1][0]=true
}else{
break
}
}
f[0][0] = true
for i:=1;i<=n;i++{
for j:=1;j<=m;j++{
if s[i-1]=='?'&&judge(p[j-1]) || s[i-1]==p[j-1]{
f[i][j] =f[i][j]||f[i-1][j-1]
}
if s[i-1]=='*'{
f[i][j] = f[i][j]||f[i-1][j]
if judge(p[j-1]){
f[i][j] = f[i][j] || f[i][j-1]
}
}
}
}
fmt.Println(f[n][m])
}
func judge(a byte)bool{
if a>='0'&&a<='9' || a>='a'&&a<='z'{
return true
}
return false
}