TimeDistributed with different input / output sequence length
I have looked for an answer to this question for quite a while, and couldn't really find a clear yes/no answer.

From what I understand, TimeDistributed really only works for similar input/output lengths. 
According to what Jason Brownlee writes in the comments section of his TimeDistributed tutorial, he would treat the different input/output lengths as a seq2seq/encoder-decoder problem (which he describes here). 

If you find a better answer, or find a way to make TimeDistributed work with different output sizes, please let me know.



*Update (copying my comment from below, with better formatting):

Actually, I have found a different solution which does use TimeDistributed: You can trim the output sequence you get from TimeDistributed using Cropping1D layer. So that my model now looks like this: 

model.add(LSTM(hidden_size, return_sequences=True, input_shape=(num_input_timepoints, 1) ,dropout=0.05)
model.add(TimeDistributed(Dense(1))) 
model.add(Cropping1D(cropping=(num_input_timepoints - num_output_timepoints,0))) # cropping the end 


Which, in your case, would trim the first 97 time points and would leave you with the last 3. That would fit the shape of your target data.