Snuke has a string x of length N. Initially, every character in x is `0`.

Snuke can do the following two operations any number of times in any order:

* Choose A consecutive characters in x and replace each of them with `0`.
* Choose B consecutive characters in x and replace each of them with `1`.



Find the number of different strings that x can be after Snuke finishes doing operations. This count can be enormous, so compute it modulo (10^9+7).

Constraints

* 1 \leq N \leq 5000
* 1 \leq A,B \leq N
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N A B


Output

Print the number of different strings that x can be after Snuke finishes doing operations, modulo (10^9+7).

Examples

Input

4 2 3


Output

11


Input

10 7 2


Output

533


Input

1000 100 10


Output

828178524

"""
Writer: SPD_9X2

すべて0にする、すべて1にするは自明に可能
なので A >= B としてよい(A<Bの時は01を入れ替えて考えればよい)

最後に置いた場所の周囲がどんな状況か考える

0*Aがある場合、その周囲はすべての場合構成可能
ない場合は…？
1*Bがある場合を考える。長さB以上の1列は後からおけるからおｋだが…
長さB以上の1をすべて0に変えたときに、長さA以上の0があればおｋ

どう数え上げる？
ダメな場合を引くのがよさそう？
→dp[i][last][num] = i番目まで見て、lastを現在num個連続しておいている場合の通り数
ただし、dp[?][1][B-1]はdp[?][0][B]に伝播する
これまずいか

ブロックで考えるやり方はどうなんだろう
つまり、連鎖を断ち切れるのは長さB以下の1列だけ

0 or B以上連続する1の列のみで構成されたブロックX(Yに隣接する端は0である必要あり)
B未満の1列であるブロックYを交互に置いていく

dp[i][XorY] = i番目の文字を次に置けるとき、最後に置いたブロックがXorYの時の通り数
初期値は
dp[0][X] = 1
dp[0][Y] = 1 ←これ、かなり注意する必要がある左端が1でもいいから
同様に、Nに移行する時にXを置くときも右端を1にできるのに注意

B以上連続する1を0に変えるとすべて0になる文字列の数をまず求める
上と同様にブロックdp?
0のブロックは,1以上のどんな長さでも置ける
1のブロックは,B以上の長さ置ける
dp[0][Z] = 1
dp[0][O] = 1

"""

N,A,B = map(int,input().split())

fdp = [[0,0] for i in range(N+1)]
fdp[0] = [1,1]
mod = 10**9+7

if A < B:
    tmp = B
    B = A
    A = tmp

for i in range(N):

    for j in range(i+1,N+1):
        fdp[j][0] += fdp[i][1]
        fdp[j][0] %= mod

    for j in range(i+B,N+1):
        fdp[j][1] += fdp[i][0]
        fdp[j][1] %= mod

#print (fdp)

dp = [[0,0] for i in range(N+1)]
dp[0] = [1,1]

for i in range(N):

    for j in range(i+1,min(N+1,i+B)):
        dp[j][1] += dp[i][0]
        dp[j][1] %= mod

    #ここかなり注意
    for j in range(i+1,min(N+1,i+A)):

        l = j-i

        if i == 0 or j == N:
            if l == 1:
                dp[j][0] += dp[i][1]
                dp[j][0] %= mod
            else:
                dp[j][0] += dp[i][1] * sum(fdp[l-1])
                dp[j][0] %= mod

        else:
            if l <= 2:
                dp[j][0] += dp[i][1]
                dp[j][0] %= mod
            else:
                dp[j][0] += dp[i][1] * sum(fdp[l-2])
                dp[j][0] %= mod

#print (dp)          
print ((pow(2,N,mod)-sum(dp[N])) % mod)
