Well I had a few minutes left after chores so I finished the program. Here is a solution. It uses incrementally bounded depth first search and is written in Shen Prolog.
(defprolog eureka!
E1 E2 E3 <-- (search-cycle (digits E1) E1* (digits E2) E2* (digits E3) E3* 0)
(total E1* T1)
(total E2* T2)
(total E3* T3)
(is Answer (output "~A + ~A = ~A~%" T1 T2 T3));)
(define digits
N -> (map (/. N (- (string->n N) 48)) (explode N)))
(defprolog search-cycle
E1 E1* E2 E2* E3 E3* Depth <-- (insert-digits-depth E1 E1* Depth)
(insert-digits-depth E2 E2* Depth)
(insert-digits-depth E3 E3* Depth)
(balanced? E1* E2* E3*);
E1 E1* E2 E2* E3 E3* Depth <-- (search-cycle E1 E1* E2 E2* E3 E3* (+ 1 Depth));)
(defprolog balanced?
E1 E2 E3 <-- (total E1 T1) (total E2 T2) (total E3 T3) (when (= (+ T1 T2) T3));)
(defprolog insert-digits-depth
Ns Ns 0 <-- !;
Ns Result Depth <-- (insert-digits Ns Intermediate)
(insert-digits-depth Intermediate Result (- Depth 1));)
(defprolog insert-digits
Ns Result <-- (insert-l [0 1 2 3 4 5 6 7 8 9] Ns Result);)
(defprolog insert-l
_ I I <--;