S = int(eval(input()))

MOD = 10 ** 9 + 7



#dp[i]最後に切った場所がi　スタートが1なのは、そこまでの切り方が1通りなので

#３以下はダメなので、3個前の結果を見るようにする

dp =  [0] * (S+1)

dp[0] = 1



for i in range(1, S+1):

    #たとえばi=6のとき、i=6で初めて切れ目を入れる時で＋１、i=3に切れ目をいれるときで＋１で合計＋２

    for j in range(0, (i-3)+1):

        dp[i] += dp[j]

        dp[i] %= MOD

print((dp[S]))        
S = int(eval(input()))

MOD = 10 ** 9 + 7



#dp[i]最後に切った場所がi　スタートが1なのは、そこまでの切り方が1通りなので

#３以下はダメなので、3個前の結果を見るようにする

dp =  [0] * (S+1)

dp[0] = 1



#これまでの和をxに保存しておく

x = 0

for i in range(1, S+1):

    if i-3 >= 0:

        x += dp[i-3]

        x %= MOD

    dp[i] = x

print((dp[S]))        
S = int(eval(input()))
MOD = 10**9 + 7
# dp[i]最後に切った場所がi　スタートが1なのは、そこまでの切り方が1通りなので
# ３以下はダメなので、3個前の結果を見るようにする
dp = [0] * (S + 1)
dp[0] = 1
for i in range(1, S + 1):
    # たとえばi=6のとき、i=6で初めて切れ目を入れる時で＋１、i=3に切れ目をいれるときで＋１で合計＋２
    for j in range(0, (i - 3) + 1):
        dp[i] += dp[j]
        dp[i] %= MOD
print((dp[S]))

S = int(eval(input()))
MOD = 10**9 + 7
# dp[i]最後に切った場所がi　スタートが1なのは、そこまでの切り方が1通りなので
# ３以下はダメなので、3個前の結果を見るようにする
dp = [0] * (S + 1)
dp[0] = 1
# これまでの和をxに保存しておく
x = 0
for i in range(1, S + 1):
    if i - 3 >= 0:
        x += dp[i - 3]
        x %= MOD
    dp[i] = x
print((dp[S]))

+# これまでの和をxに保存しておく +x = 0 -    # たとえばi=6のとき、i=6で初めて切れ目を入れる時で＋１、i=3に切れ目をいれるときで＋１で合計＋２ -    for j in range(0, (i - 3) + 1): -        dp[i] += dp[j] -        dp[i] %= MOD +    if i - 3 >= 0: +        x += dp[i - 3] +        x %= MOD +    dp[i] = x