import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

/**
 * Fukushimaken
 */
public class Main{
    /** 座席数 */
    public static final int SEAT_NUM = 17;
    /** 来店するグループ数 */
    public static final int GROUP_NUM = 100;
    /** 客の到着する間隔 */
    public static final int ARRIVE_INTERVAL = 5;
    
    /** 座席 */
    // -1 は空席、0以上はグループの番号
    public static int[] seat = new int[SEAT_NUM];
    /** 座席毎の食べ終わる時間 */
    //誰もいない場合は-1。 */
    public static int[] eatEndTime = new int[SEAT_NUM];
    /** n番目の客の待ち時間 */
    public static int[] waitingTime = new int[GROUP_NUM];
    /** 先頭で待っているグループ番号 */
    public static int headGroupNo = -1;
    
    static {
        Arrays.fill(waitingTime, -1);
    }
    
    /**
     * エントリポイント
     */
    public static void main(String args[]) throws IOException {        
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = "";
        
        //入力値をまとめて読み込み
        //（入力値中の、最大のグループ番号を求める）
        List<Integer> inputList = new ArrayList<Integer>();
        int maxGroupNum = 0;
        while(true) {
            input = br.readLine();
            if(input == null) break;
            
            int inputInt = Integer.parseInt(input);
            if(maxGroupNum < inputInt) maxGroupNum = inputInt;
            
            inputList.add(Integer.parseInt(input));
        }
        
        //入力値中の、最大のグループ番号までの待ち時間を計算
        calcWaitTime(maxGroupNum);
        
        //結果を表示
        for (int i = 0;  i < inputList.size(); i++) {
            System.out.println(waitingTime[inputList.get(i)]);
        }

    }
    
    /**
     * 待ち時間を計算し、waitingTimeに記録する。
     * ただし、入力値中の、最大のグループ番号まで、計算する。
     */
    public static void calcWaitTime(int maxGroupNum) {
        for (int min = 0; ; min++) {

            //食べ終わりの判定
            for (int s = 0; s < SEAT_NUM; s++) {
                if(eatEndTime[s] == min) {
                    seat[s] = -1;
                    eatEndTime[s] = -1;
                }
            }
            
            //客が到着し、誰も待っていなければ先頭のグループNoを更新
            if (min % 5 == 0 && headGroupNo == -1) {
                headGroupNo = min / ARRIVE_INTERVAL;
            }
            
            //席が空いていれば着席させる
            while(headGroupNo != -1) {
                //連続して空いている席を探索
                int blankSeatNum = 0;
                //i番目のグループの人数は i%5 が 1 のとき5人、それ以外のときは2人
                int numInGroup = headGroupNo % 5 == 1 ? 5 : 2;
                int s;
                for (s = 0; s < SEAT_NUM && blankSeatNum < numInGroup; s++) {
                    if (seat[s] == -1) {
                        blankSeatNum++;
                    } else {
                        blankSeatNum = 0;
                    }
                }

                //着席できた場合
                if(blankSeatNum == numInGroup) {
                    for(int ts = s - 1; ts > s - 1 - numInGroup; ts--) {
                        seat[ts] = headGroupNo;
                        //i番目のグループは、席に着くと 17(i%2)+3(i%3)+19 分間で食事を済ませる
                        eatEndTime[ts] = min + (17 * (headGroupNo % 2) + 3 * (headGroupNo % 3) + 19);
                    }
                    
                    //待った時間を記録
                    waitingTime[headGroupNo] = min - headGroupNo * ARRIVE_INTERVAL;
                    
                    //求める最大のグループ番号が着席できた時点で、処理中断。
                    if (headGroupNo == maxGroupNum) return;
                    
                    //次に先頭になるグループを算出
                    if(min >= (headGroupNo + 1) * ARRIVE_INTERVAL) {
                        //次のグループが既に到着していれば、次のグループが先頭
                        headGroupNo++;
                    } else {
                        //まだ到着していなければ、
                        headGroupNo = -1;
                    }
                } else {
                    //着席できない場合、次の時刻に進む
                    break;
                }
            }
        }
    }
}

Measured memory_bytes: 16860