#include <bits/stdc++.h>
#define REP(i,n) for(int i=0; i<(int)(n); ++i)

using namespace std;

const int MOD = 1000000007;

void add(int& x, int y){
    x = (x + y) % MOD;
}

bool match(char c, int k){
    if(c == '?') return true;
    return c - '0' == k;
}

int main(){
    string s, t, w;
    while(cin >> s >> t >> w){
        int n = s.size();
        int cur[2] = {};
        cur[0] = 1;
        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());
        reverse(w.begin(), w.end());
        for(int i = 0; i < n; i++){
            int next[2] = {};
            for(int x = (i < n - 1 ? 0 : 1); x < 10; x++) if(match(s[i], x)) {
                for(int y = (i < n - 1 ? 0 : 1); y < 10; y++) if(match(t[i], y)) {
                    for(int a = 0; a < 2; a++){
                        int z = (x + y + a) % 10;
                        if(z == 0 && i == n - 1) continue;
                        int b = (x + y + a) / 10;
                        if(match(w[i], z)) {
                            add(next[b], cur[a]);
                        }
                    }
                }
            }
            memcpy(cur, next, sizeof(cur));
        }
        cout << cur[0] << endl;
    }
    return 0;
}