import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		int k = scan.nextInt();
		long s = scan.nextInt();
		if(s/k > n-1)
		{
			System.out.println("NO");
			return;
		}
		long rem = s - k*(s/k);
		long min = s/k;
		while(rem > n-1)
		{
			rem = rem%k;
			min++;
		}
		if(min > n-1)
		{
			System.out.println("NO");
			return;
		}
		long arr[] = new long[k];
		Arrays.fill(arr,min);
		int i = 0;
		while(i < k)
		{
			long a = Math.min(rem,n-1-min);
			rem-=a;
			arr[i]+=a;
			if(rem == 0)
				break;
			i++;
		}
		if(rem > 0)
		{
			System.out.println("NO");
			return;
		}
		long start = 1;
		//System.out.println(Arrays.toString(arr));
		for(i = 0;i < k;i++)
		{
			if(start + arr[i] <=n)
				{
					System.out.print((start + arr[i])+" ");
					start = start + arr[i];
				}
			else if (start - arr[i] >= 0)
			{
				System.out.print((start - arr[i])+" ");
				start = start - arr[i];
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		int k = scan.nextInt();
		long s = scan.nextInt();
		if(s/k > n-1)
		{
			System.out.println("NO");
			return;
		}
		long rem = s - k*(s/k);
		long min = s/k;
		while(rem > n-1)
		{
			rem = rem%k;
			min++;
		}
		if(min > n-1)
		{
			System.out.println("NO");
			return;
		}
		long arr[] = new long[k];
		Arrays.fill(arr,min);
		int i = 0;
		while(i < k)
		{
			long a = Math.min(rem,n-1-min);
			rem-=a;
			arr[i]+=a;
			if(rem == 0)
				break;
			i++;
		}
		if(rem > 0)
		{
			System.out.println("NO");
			return;
		}
		long start = 1;
		//System.out.println(Arrays.toString(arr));
		System.out.println("YES");
		for(i = 0;i < k;i++)
		{
			if(start + arr[i] <=n)
				{
					System.out.print((start + arr[i])+" ");
					start = start + arr[i];
				}
			else if (start - arr[i] >= 0)
			{
				System.out.print((start - arr[i])+" ");
				start = start - arr[i];
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		long k = scan.nextInt();
		long s = scan.nextInt();
		long x = -1,y = -1;
		for(int i = 1;i <k;i++)
		{
			long lhs = (k - i);
			long rhs = s - (n-1)*i;
			long div = rhs/lhs;
			if(div*lhs == rhs)
			{
				x = i;
				y = div;
				if(y < n)
					break;
			}
		}
		//System.out.println("x "+x+" y "+y);
		if(y>=n)
		{
			System.out.println("NO");
			return;
		}
		System.out.println("YES");
		long last = 0;
		for(int i = 0;i < x;i++)
		{
			if(i%2 == 0)
				{
					System.out.print(n+" ");
					last = n;
				}
			else
			{
				System.out.print(1+" ");
				last = 1;
			}
		}
		for(int i = 0;i < k - x;i++)
		{
			if(last == n && i%2 == 0)
			{
				System.out.print((last - y)+" ");
			}
			else if(last == n)
			{
				System.out.print(last+" ");
			}
			else if(last == 1 && i%2 == 0)
			{
				System.out.print(last + " ");
			}
			else
			{
				System.out.print((last + y)+" ");
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		int k = scan.nextInt();
		long s = scan.nextInt();
		if(s/k > n-1)
		{
			System.out.println("NO");
			return;
		}
		long rem = s - k*(s/k);
		long min = s/k;
		while(rem > k)
		{
			rem = rem%k;
			min++;
		}
		if(min > n-1)
		{
			System.out.println("NO");
			return;
		}
		long arr[] = new long[k];
		Arrays.fill(arr,min);
		int i = 0;
		while(i < k)
		{
			long a = Math.min(rem,n-1-min);
			rem-=a;
			arr[i]+=a;
			if(rem == 0)
				break;
			i++;
		}
		if(rem > 0)
		{
			System.out.println("NO");
			return;
		}
		long start = 1;
		//System.out.println(Arrays.toString(arr));
		System.out.println("YES");
		for(i = 0;i < k;i++)
		{
			if(start + arr[i] <=n)
				{
					System.out.print((start + arr[i])+" ");
					start = start + arr[i];
				}
			else if (start - arr[i] >= 0)
			{
				System.out.print((start - arr[i])+" ");
				start = start - arr[i];
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		long k = scan.nextInt();
		long s = scan.nextInt();
		long x = -1,y = -1;
		for(int i = 1;i <k;i++)
		{
			long lhs = (k - i);
			long rhs = s - (n-1)*i;
			long div = rhs/lhs;
			if(div*lhs == rhs)
			{
				x = i;
				y = div;
				if(y < n)
					break;
			}
		}
		System.out.println("x "+x+" y "+y);
		if(y>=n || y == -1)
		{
			System.out.println("NO");
			return;
		}
		System.out.println("YES");
		long last = 0;
		for(int i = 0;i < x;i++)
		{
			if(i%2 == 0)
				{
					System.out.print(n+" ");
					last = n;
				}
			else
			{
				System.out.print(1+" ");
				last = 1;
			}
		}
		for(int i = 0;i < k - x;i++)
		{
			if(last == n && i%2 == 0)
			{
				System.out.print((last - y)+" ");
			}
			else if(last == n)
			{
				System.out.print(last+" ");
			}
			else if(last == 1 && i%2 == 0)
			{
				System.out.print((last + y) + " ");
			}
			else
			{
				System.out.print((last)+" ");
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		long k = scan.nextInt();
		long s = scan.nextInt();
		long x = -1,y = -1;
		for(int i = 1;i <k;i++)
		{
			long lhs = (k - i);
			long rhs = s - (n-1)*i;
			long div = rhs/lhs;
			if(div*lhs == rhs)
			{
				x = i;
				y = div;
				if(y < n)
					break;
			}
		}
		//System.out.println("x "+x+" y "+y);
		if(y>=n || y == -1)
		{
			System.out.println("NO");
			return;
		}
		System.out.println("YES");
		long last = 0;
		for(int i = 0;i < x;i++)
		{
			if(i%2 == 0)
				{
					System.out.print(n+" ");
					last = n;
				}
			else
			{
				System.out.print(1+" ");
				last = 1;
			}
		}
		for(int i = 0;i < k - x;i++)
		{
			if(last == n && i%2 == 0)
			{
				System.out.print((last - y)+" ");
			}
			else if(last == n)
			{
				System.out.print(last+" ");
			}
			else if(last == 1 && i%2 == 0)
			{
				System.out.print((last + y) + " ");
			}
			else
			{
				System.out.print((last)+" ");
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		int k = scan.nextInt();
		long s = scan.nextLong();
		if(s/k > n-1 || k > s)
		{
			System.out.println("NO");
			return;
		}
		long rem = s - k*(s/k);
		long min = s/k;
		while(rem > k)
		{
			rem = rem - k;
			min++;
		}
		if(min > n-1)
		{
			System.out.println("NO");
			return;
		}
		long arr[] = new long[k];
		Arrays.fill(arr,min);
		int i = 0;
		while(i < k)
		{
			long a = Math.min(rem,n-1-min);
			rem-=a;
			arr[i]+=a;
			if(rem == 0)
				break;
			i++;
		}
		if(rem > 0 || arr[0] > n-1)
		{
			System.out.println("NO");
			return;
		}
		long start = 1;
		//System.out.println(Arrays.toString(arr));
		System.out.println("YES");
		for(i = 0;i < k;i++)
		{
			if(start + arr[i] <=n)
				{
					System.out.print((start + arr[i])+" ");
					start = start + arr[i];
				}
			else if (start - arr[i] >= 0)
			{
				System.out.print((start - arr[i])+" ");
				start = start - arr[i];
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		long k = scan.nextInt();
		long s = scan.nextInt();
		long x = -1,y = -1;
		for(int i = 1;i <k;i++)
		{
			long lhs = (k - i);
			long rhs = s - (n-1)*i;
			long div = rhs/lhs;
			if(div*lhs == rhs)
			{
				x = i;
				y = div;
				if(y < n)
					break;
			}
		}
		//System.out.println("x "+x+" y "+y);
		if(y>=n || y == -1)
		{
			System.out.println("NO");
			return;
		}
		System.out.println("YES");
		long last = 0;
		for(int i = 0;i < x;i++)
		{
			if(i%2 == 0)
				{
					System.out.print(n+" ");
					last = n;
				}
			else
			{
				System.out.print(1+" ");
				last = 1;
			}
		}
		for(int i = 0;i < k - x;i++)
		{
			if(last == n && i%2 == 0)
			{
				System.out.print((last - y)+" ");
			}
			else if(last == n)
			{
				System.out.print(last+" ");
			}
			else if(last == 1 && i%2 == 0)
			{
				System.out.print(last + " ");
			}
			else
			{
				System.out.print((last + y)+" ");
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.util.*;
public class A{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextInt();
		int k = scan.nextInt();
		long s = scan.nextInt();
		if(s/k > n-1)
		{
			System.out.println("NO");
			return;
		}
		long rem = s - k*(s/k);
		long min = s/k;
		while(rem > k)
		{
			rem = rem - k;
			min++;
		}
		if(min > n-1)
		{
			System.out.println("NO");
			return;
		}
		long arr[] = new long[k];
		Arrays.fill(arr,min);
		int i = 0;
		while(i < k)
		{
			long a = Math.min(rem,n-1-min);
			rem-=a;
			arr[i]+=a;
			if(rem == 0)
				break;
			i++;
		}
		if(rem > 0 || arr[0] > n-1)
		{
			System.out.println("NO");
			return;
		}
		long start = 1;
		//System.out.println(Arrays.toString(arr));
		System.out.println("YES");
		for(i = 0;i < k;i++)
		{
			if(start + arr[i] <=n)
				{
					System.out.print((start + arr[i])+" ");
					start = start + arr[i];
				}
			else if (start - arr[i] >= 0)
			{
				System.out.print((start - arr[i])+" ");
				start = start - arr[i];
			}
		}
		System.out.println();

	}
	public void sort(int arr[])
	{
		int n = arr.length;
		Integer A[] = new Integer[n];
		for(int i = 0;i < n;i++)
			A[i] = arr[i];
		Arrays.sort(A);
	}
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Main{
	static class MyScanner {
	    BufferedReader br;
	    StringTokenizer st;

	    public MyScanner() {
	       br = new BufferedReader(new InputStreamReader(System.in));
	    }

	    String next() {
	        while (st == null || !st.hasMoreElements()) {
	            try {
	                st = new StringTokenizer(br.readLine());
	            } catch (IOException e) {
	                e.printStackTrace();
	            }
	        }
	        return st.nextToken();
	    }

	    int nextInt() { return Integer.parseInt(next());}

	    long nextLong() {return Long.parseLong(next());}

	    double nextDouble() {return Double.parseDouble(next());}

	    String nextLine(){
	        String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	    }
	}

		 public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException {
			 	PrintWriter out = new PrintWriter(System.out);
			    MyScanner sc = new MyScanner();
			 	Main solver = new Main();
				solver.solve(out, sc);
				out.flush();
				out.close();

		 }

 		void solve(PrintWriter out, MyScanner sc) throws IOException, ParserConfigurationException, SAXException{

 			long n = sc.nextLong();
 			long k = sc.nextLong();
 			long s = sc.nextLong();

 			long cur = 1;
 			if(k > s || k * (n - 1) < s) {out.print("NO");}
 			else {
 				out.println("YES");
 				long l;
 				while(k > 0) {
 					l = Math.min(n - 1, s - (k - 1));
 					cur = step(cur, l);
 					out.print(cur + " ");
 					s -= l;
 					k -= 1;
 				}
 			}

		}

			long step(long cur, long x) {
				if(cur - x > 0) return cur - x;
				return cur + x;
			}

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Main{
	static class MyScanner {
	    BufferedReader br;
	    StringTokenizer st;

	    public MyScanner() {
	       br = new BufferedReader(new InputStreamReader(System.in));
	    }

	    String next() {
	        while (st == null || !st.hasMoreElements()) {
	            try {
	                st = new StringTokenizer(br.readLine());
	            } catch (IOException e) {
	                e.printStackTrace();
	            }
	        }
	        return st.nextToken();
	    }

	    int nextInt() { return Integer.parseInt(next());}

	    long nextLong() {return Long.parseLong(next());}

	    double nextDouble() {return Double.parseDouble(next());}

	    String nextLine(){
	        String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	    }
	}

		 public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException {
			 	PrintWriter out = new PrintWriter(System.out);
			    MyScanner sc = new MyScanner();
			 	Main solver = new Main();
				solver.solve(out, sc);
				out.flush();
				out.close();

		 }

 		void solve(PrintWriter out, MyScanner sc) throws IOException, ParserConfigurationException, SAXException{

 			int n = sc.nextInt();
 			int k = sc.nextInt();
 			long s = sc.nextLong();

 			long cur = 1;
 			if(k > s || k * (n - 1) < s) {out.print("NO");}
 			else {
 				out.println("YES");
 				long l;
 				while(k > 0) {
 					l = Math.min(n - 1, s - (k - 1));
 					cur = step(cur, l);
 					out.print(cur + " ");
 					s -= l;
 					k -= 1;
 				}
 			}

		}

			long step(long cur, long x) {
				if(cur - x > 0) return cur - x;
				return cur + x;
			}

}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Main{
	static class MyScanner {
	    BufferedReader br;
	    StringTokenizer st;

	    public MyScanner() {
	       br = new BufferedReader(new InputStreamReader(System.in));
	    }

	    String next() {
	        while (st == null || !st.hasMoreElements()) {
	            try {
	                st = new StringTokenizer(br.readLine());
	            } catch (IOException e) {
	                e.printStackTrace();
	            }
	        }
	        return st.nextToken();
	    }

	    int nextInt() { return Integer.parseInt(next());}

	    long nextLong() {return Long.parseLong(next());}

	    double nextDouble() {return Double.parseDouble(next());}

	    String nextLine(){
	        String str = "";
		  try {
		     str = br.readLine();
		  } catch (IOException e) {
		     e.printStackTrace();
		  }
		  return str;
	    }
	}

		 public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException {
			 	PrintWriter out = new PrintWriter(System.out);
			    MyScanner sc = new MyScanner();
			 	Main solver = new Main();
				solver.solve(out, sc);
				out.flush();
				out.close();

		 }

 		void solve(PrintWriter out, MyScanner sc) throws IOException, ParserConfigurationException, SAXException{

 			int n = sc.nextInt();
 			int k = sc.nextInt();
 			int s = sc.nextInt();

 			int cur = 1;
 			if(k > s || k * (n - 1) < s) {out.print("NO");}
 			else {
 				out.println("YES");
 				int l;
 				while(k > 0) {
 					l = Math.min(n - 1, s - (k - 1));
 					cur = step(cur, l);
 					out.print(cur + " ");
 					s -= l;
 					k -= 1;
 				}
 			}

		}

			int step(int cur, int x) {
				if(cur - x > 0) return cur - x;
				return cur + x;
			}

}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	sb.append((s%k+val+1)+" ");
	    	sb.append((s%k+1)+" ");
	    	long ss=s;
	    	s-=(ss%k+val);
	    	s-=val;
	    	long st=(ss%k+1);
	    	for(int i=0;i<k-2;i++) {
	    		if(st==(ss%k+1))
	    			st=1+val+ss%k;
	    		else
	    			st=(ss%k+1);
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    	out.println("YES");
	    	out.println(sb);
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	sb.append((s%k+val+1)+" ");
	    	sb.append((s%k+1)+" ");
	    	long ss=s;
	    	s-=(ss%k+val);
	    	s-=val;
	    	long st=(ss%k+1);
	    	for(int i=0;i<k-2;i++) {
	    		if(st==(ss%k+1))
	    			st=1+val+ss%k;
	    		else
	    			st=(ss%k+1);
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    if(k*(n-1l)<s) {
	    	System.out.println(-1);
	    	return;
	    }
	    long val=s/k;
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	sb.append((s%k+val+1)+" ");
	    	sb.append((s%k+1)+" ");
	    	long ss=s;
	    	s-=(ss%k+val);
	    	s-=val;
	    	long st=(ss%k+1);
	    	for(int i=0;i<k-2;i++) {
	    		if(st==(ss%k+1))
	    			st=1+val+ss%k;
	    		else
	    			st=(ss%k+1);
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	long add=s%k;
	    	long st=1;
	    	long st1=0;
	    	boolean even=true;
	    	for(int i=0;i<k;i++) {
	    	if(add==0) {
	    		if(even) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    		}
	    		else {
	    			if(st==2)
		    			st=2+val;
		    		else
		    			st=2;
		    		sb.append(st+" ");
		    		s-=val;
	    		}
	    	}
	    	else {
	    		if(st==1) {
	    			st=1+val+1;
	    		even=false;
	    		st1=2;
	    		}
	    		else {
	    			st=1;
	    			even=true;
	    		}
	    		sb.append(st+" ");
	    		add--;
	    		s-=val;
	    		s--;
	    	}
	    	}
	    }
	    	out.println("YES");
	    	out.println(sb);
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    while(k-->0) {
	     if(s>n-1) {
	    	 s-=(n-1);
	    	 if(v==1)
	    		 v=n;
	    	 else
	    		 v=1;
	    	 sb.append(v+" ");
	     }
	     else {
	    	 if(v==1)
	    		 v=1+s;
	    	 else
	    		 v-=s;
	    	 sb.append(v);
	     s=0;
	     break;
	     }
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(val==n-1 && s%k!=0) {
	    	System.out.println("NO");
	    	return;
	    }
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	long add=s%k;
	    	long st=1;
	    	boolean even=true;
	    	for(int i=0;i<k;i++) {
	    	if(add==0) {
	    		if(even) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");

	    		}
	    		else {
	    			if(st==2)
		    			st=2+val;
		    		else
		    			st=2;
		    		sb.append(st+" ");

	    		}
	    		s-=val;
	    	}
	    	else {
	    		if(st==1) {
	    			st=1+val+1;
	    		even=false;
	    		}
	    		else {
	    			st=1;
	    			even=true;
	    		}
	    		sb.append(st+" ");
	    		add--;
	    		s-=val;
	    		s--;
	    	}
	    	}
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(val==n-1 && s%k!=0) {
	    	System.out.println("NO");
	    	return;
	    }
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	long add=s%k;
	    	long st=1;
	    	boolean even=true;
	    	for(int i=0;i<k;i++) {
	    	if(add<=0) {
	    		if(even) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");

	    		}
	    		else {
	    			if(st==2)
		    			st=2+val;
		    		else
		    			st=2;
		    		sb.append(st+" ");

	    		}
	    		s-=val;
	    	}
	    	else {
	    		if(st==1) {
	    			st=1+val+1;
	    		even=false;
	    		}
	    		else {
	    			st=1;
	    			even=true;
	    		}
	    		sb.append(st+" ");
	    		add--;
	    		s-=val;
	    		s--;
	    	}
	    	}
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    long v=1;
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	long add=s%k;
	    	long st=1;
	    	boolean even=true;
	    	for(int i=0;i<k;i++) {
	    	if(add==0) {
	    		if(even) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");

	    		}
	    		else {
	    			if(st==2)
		    			st=2+val;
		    		else
		    			st=2;
		    		sb.append(st+" ");

	    		}
	    		s-=val;
	    	}
	    	else {
	    		if(st==1) {
	    			st=1+val+1;
	    		even=false;
	    		}
	    		else {
	    			st=1;
	    			even=true;
	    		}
	    		sb.append(st+" ");
	    		add--;
	    		s-=val;
	    		s--;
	    	}
	    	}
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.*;
import java.util.*;

public class tr0 {
	static PrintWriter out;
	static StringBuilder sb;
	static long mod = 1000000007;
	static int inf = 1000000000;
	static long[] fac;
	static int[] si;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		long n = sc.nextLong();
	    long k=sc.nextLong();
	    long s=sc.nextLong();
	    sb=new StringBuilder();
	    if(k*(n-1l)<s) {
	    	System.out.println("NO");
	    	return;
	    }
	    if(s<k) {
	    	System.out.println("NO");
	    	return;
	    }
	    long val=s/k;
	    if(val==n-1 && s%k!=0) {
	    	System.out.println("NO");
	    	return;
	    }
	    if(s%k==0) {
	    	long st=1;
	    	for(int i=0;i<k;i++) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");
	    		s-=val;
	    	}
	    }
	    else {
	    	long add=s%k;
	    	long st=1;
	    	boolean even=true;
	    	for(int i=0;i<k;i++) {
	    	if(add<=0) {
	    		if(even) {
	    		if(st==1)
	    			st=1+val;
	    		else
	    			st=1;
	    		sb.append(st+" ");

	    		}
	    		else {
	    			if(st==2)
		    			st=2+val;
		    		else
		    			st=2;
		    		sb.append(st+" ");

	    		}
	    		s-=val;
	    	}
	    	else {
	    		if(st==1) {
	    			st=1+val+1;
	    		even=false;
	    		}
	    		else {
	    			st=1;
	    			even=true;
	    		}
	    		sb.append(st+" ");
	    		add--;
	    		s-=val;
	    		s--;
	    	}
	    	}
	    }
	    if(s>0)
	    	out.println("NO");
	    else {
	    	out.println("YES");
	    	out.println(sb);
	    }
		out.flush();
	}

	static class pair implements Comparable<pair> {
		long x;
		long y;

		pair(long x, long y) {
			this.x = x;
			this.y = y;
		}

		public String toString() {
			return x + " " + y;
		}

		public int compareTo(pair o) {
			return (int)((o.x-o.y)-(x-y));
		}
	}

	static long inver(long x) {
		int a = (int) x;
		long e = (mod - 2);
		long res = 1;
		while (e > 0) {
			if ((e & 1) == 1) {
				// System.out.println(res*a);
				res = (int) ((1l * res * a) % mod);
			}
			a = (int) ((1l * a * a) % mod);
			e >>= 1;
		}
		// out.println(res+" "+x);
		return res % mod;
	}

	static long fac(int n) {
		if (n == 0)
			return fac[n] = 1;
		if (n == 1)
			return fac[n] = 1;
		long ans = 1;
		for (int i = 1; i <= n; i++)
			fac[i] = ans = (i % mod * ans % mod) % mod;
		return ans % mod;
	}

	static long gcd(long a, long b) {

		if (b == 0)
			return a;
		return gcd(b, a % b);
	}

	static class sol {
		boolean st;
		int l;
		int r;
		char s;

		sol(boolean st, int l, int r, char s) {
			this.st = st;
			this.l = l;
			this.r = r;
			this.s = s;
		}

		public String toString() {
			return st + " " + l + " " + r + " " + s;
		}
	}

	static class unionfind {
		int[] p;
		int[] size;

		unionfind(int n) {
			p = new int[n];
			size = new int[n];

			for (int i = 0; i < n; i++) {
				p[i] = i;
			}
			Arrays.fill(size, 1);
		}

		int findSet(int v) {
			if (v == p[v])
				return v;
			return p[v] = findSet(p[v]);
		}

		boolean sameSet(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return true;
			return false;
		}

		int max() {
			int max = 0;
			for (int i = 0; i < size.length; i++)
				if (size[i] > max)
					max = size[i];
			return max;
		}

		void combine(int a, int b) {
			a = findSet(a);
			b = findSet(b);
			if (a == b)
				return;
			if (size[a] > size[b]) {
				p[b] = a;
				size[a] += size[b];

			} else {
				p[a] = b;
				size[b] += size[a];
			}
		}
	}

	static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

		public int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		public double nextDouble() throws IOException {
			return Double.parseDouble(next());
		}

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

		public Long nextLong() throws IOException {
			return Long.parseLong(next());
		}

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            long n = in.nextInt(), k = in.nextInt();
            long s = in.nextLong();

            List<Long> ans = solve(n, k, s);
            if (ans == null) {
                out.println(NO);
                return;
            }
            out.println(YES);
            out.println(Util.join(ans));
        }

        static List<Long> solve(long n, long k, long s) {
            if (s > (n - 1) * k) {
                return null;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                remain += n - 1;
            }
            if (full < 0)
                return null;

            long cur = 1;

            List<Long> ans = new ArrayList<>();
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans.add(cur);
            }
            if (remain > 0) {
                long ones = (k - ans.size()) - 1;
                long step = remain - ones;

                if (step < 0)
                    return null;
                if (step > 0) {
                    if (cur == 1) {
                        cur += step;
                        ans.add(cur);
                    } else {
                        cur -= step;
                        ans.add(cur);
                    }
                }
                while (ans.size() < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans.add(cur);
                }
            }

            long start = 1;
            long tot = 0;
            for (long x : ans) {
                tot += Math.abs(x - start);
                Util.ASSERT(x != start);
                Util.ASSERT(x >= 1 && x <= n);
                start = x;
            }
            Util.ASSERT(ans.size() == k);
            Util.ASSERT(tot == s);

            return ans;
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(Iterable i) {
            StringBuilder sb = new StringBuilder();
            for (Object o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

        public static void ASSERT(boolean assertion) {
            if (!assertion)
                throw new AssertionError();
        }

    }
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            long n = in.nextInt(), k = in.nextInt();
            long s = in.nextLong();

            if (s > (n - 1) * k) {
                out.println(NO);
                return;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                remain += n - 1;
            }
            long cur = 1;

            List<Long> ans = new ArrayList<>();
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans.add(cur);
            }
            if (remain > 0) {
                long ones = (k - ans.size()) - 1;
                long step = remain - ones;
                if (step > 0) {
                    if (cur == 1) {
                        cur += step;
                        ans.add(cur);
                    } else {
                        cur -= step;
                        ans.add(cur);
                    }
                }
                while (ans.size() < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans.add(cur);
                }
            }

            out.println(YES);
            out.println(Util.join(ans));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(Iterable i) {
            StringBuilder sb = new StringBuilder();
            for (Object o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

    }
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            long n = in.nextInt(), k = in.nextInt();
            long s = in.nextLong();

            if (s > (n - 1) * k) {
                out.println(NO);
                return;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                remain += n - 1;
            }
            long cur = 1;

            List<Long> ans = new ArrayList<>();
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans.add(cur);
            }
            if (remain > 0) {
                long ones = (k - ans.size()) - 1;
                long step = remain - ones;
                if (cur == 1) {
                    cur += step;
                    ans.add(cur);
                } else {
                    cur -= step;
                    ans.add(cur);
                }
                while (ans.size() < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans.add(cur);
                }
            }

            out.println(YES);
            out.println(Util.join(ans));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(Iterable i) {
            StringBuilder sb = new StringBuilder();
            for (Object o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

    }
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            long n = in.nextInt(), k = in.nextInt();
            long s = in.nextLong();

            List<Long> ans = solve(n, k, s);
            if (ans == null) {
                out.println(NO);
                return;
            }
            out.println(YES);
            out.println(Util.join(ans));
        }

        static List<Long> solve(long n, long k, long s) {
            if (s > (n - 1) * k) {
                return null;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                remain += n - 1;
            }
            if (full < 0)
                return null;

            long cur = 1;

            List<Long> ans = new ArrayList<>();
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans.add(cur);
            }
            if (remain > 0) {
                long ones = (k - ans.size()) - 1;
                long step = remain - ones;

                if (step < 0)
                    return null;
                if (step > 0) {
                    if (cur == 1) {
                        cur += step;
                        ans.add(cur);
                    } else {
                        cur -= step;
                        ans.add(cur);
                    }
                }
                while (ans.size() < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans.add(cur);
                }
            }

//        long start = 1;
//        long tot = 0;
//        for (long x : ans) {
//            tot += Math.abs(x - start);
//            Util.ASSERT(x != start);
//            Util.ASSERT(x >= 1 && x <= n);
//            start = x;
//        }
//        Util.ASSERT(ans.size() == k);
//        Util.ASSERT(tot == s);

            return ans;
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(Iterable i) {
            StringBuilder sb = new StringBuilder();
            for (Object o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

    }
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            int n = in.nextInt(), k = in.nextInt();
            long s = in.nextLong();
            int[] ans = solve(n, k, s);
            if (ans == null) {
                out.println(NO);
                return;
            }
            out.println(YES);
            out.println(Util.join(ans));
        }

        static int[] solve(int n, int k, long s) {
            if (s > (n - 1) * (long) k) {
                return null;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                remain += n - 1;
            }
            if (full < 0)
                return null;

            int cur = 1;

            int[] ans = new int[(int) k];
            int ansIndex = 0;
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans[ansIndex++] = cur;
            }
            if (remain > 0) {
                int ones = (k - ansIndex) - 1;
                long step = remain - ones;

                if (step < 0)
                    return null;
                if (step > 0) {
                    if (cur == 1) {
                        cur += step;
                        ans[ansIndex++] = cur;
                    } else {
                        cur -= step;
                        ans[ansIndex++] = cur;
                    }
                }
                while (ansIndex < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans[ansIndex++] = cur;
                }
            }

//        long start = 1;
//        long tot = 0;
//        for (long x : ans) {
//            tot += Math.abs(x - start);
//            Util.ASSERT(x != start);
//            Util.ASSERT(x >= 1 && x <= n);
//            start = x;
//        }
//        Util.ASSERT(ans.size() == k);
//        Util.ASSERT(tot == s);

            return ans;
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(int... i) {
            StringBuilder sb = new StringBuilder();
            for (int o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

    }
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";
        PrintWriter out;

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            int n = in.nextInt(), k = in.nextInt();
            this.out = out;
            long s = in.nextLong();
            solve(n, k, s);
        }

        void solve(int n, int k, long s) {
            if (s > (n - 1) * (long) k) {
                out.println(NO);
                return;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                remain += n - 1;
            }
            if (full < 0 || full > k) {
                out.println(NO);
                return;
            }

            int cur = 1;

            int[] ans = new int[(int) k];
            int ansIndex = 0;
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans[ansIndex++] = cur;
            }
            if (remain > 0) {
                int ones = (k - ansIndex) - 1;
                long step = remain - ones;

                if (step < 0) {
                    out.println(NO);
                    return;
                }
                if (step > 0) {
                    if (cur == 1) {
                        cur += step;
                        ans[ansIndex++] = cur;
                    } else {
                        cur -= step;
                        ans[ansIndex++] = cur;
                    }
                }
                while (ansIndex < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans[ansIndex++] = cur;
                }
            }

//        long start = 1;
//        long tot = 0;
//        for (long x : ans) {
//            tot += Math.abs(x - start);
//            Util.ASSERT(x != start);
//            Util.ASSERT(x >= 1 && x <= n);
//            start = x;
//        }
//        Util.ASSERT(ans.size() == k);
//        Util.ASSERT(tot == s);

            out.println(YES);
            out.println(Util.join(ans));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(int... i) {
            StringBuilder sb = new StringBuilder();
            for (int o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

    }
}


import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author anand.oza
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DWalkingBetweenHouses solver = new DWalkingBetweenHouses();
        solver.solve(1, in, out);
        out.close();
    }

    static class DWalkingBetweenHouses {
        final String NO = "NO";
        final String YES = "YES";
        PrintWriter out;

        public void solve(int testNumber, InputReader in, PrintWriter out) {
            int n = in.nextInt(), k = in.nextInt();
            this.out = out;
            long s = in.nextLong();
            solve(n, k, s);
        }

        void solve(int n, int k, long s) {
            if (s > (n - 1) * (long) k) {
                out.println(NO);
                return;
            }

            long full = s / (n - 1);
            long remain = s % (n - 1);
            while (full + remain < k) {
                full--;
                if (full < 0 || full > k) {
                    out.println(NO);
                    return;
                }
                remain += n - 1;
            }
            if (full < 0 || full > k) {
                out.println(NO);
                return;
            }

            int cur = 1;

            int[] ans = new int[(int) k];
            int ansIndex = 0;
            for (int i = 0; i < full; i++) {
                cur = n + 1 - cur;
                ans[ansIndex++] = cur;
            }
            if (remain > 0) {
                int ones = (k - ansIndex) - 1;
                long step = remain - ones;

                if (step < 0) {
                    out.println(NO);
                    return;
                }
                if (step > 0) {
                    if (cur == 1) {
                        cur += step;
                        ans[ansIndex++] = cur;
                    } else {
                        cur -= step;
                        ans[ansIndex++] = cur;
                    }
                }
                while (ansIndex < k) {
                    if (cur < n)
                        cur++;
                    else
                        cur--;
                    ans[ansIndex++] = cur;
                }
            }

//        long start = 1;
//        long tot = 0;
//        for (long x : ans) {
//            tot += Math.abs(x - start);
//            Util.ASSERT(x != start);
//            Util.ASSERT(x >= 1 && x <= n);
//            start = x;
//        }
//        Util.ASSERT(ans.size() == k);
//        Util.ASSERT(tot == s);

            out.println(YES);
            out.println(Util.join(ans));
        }

    }

    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

    static class Util {
        public static String join(int... i) {
            StringBuilder sb = new StringBuilder();
            for (int o : i) {
                sb.append(o);
                sb.append(" ");
            }
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
            return sb.toString();
        }

    }
}


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.SortedSet;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 * #
 * @author pttrung
 */
public class D_Round_501_Div3 {

    public static long MOD = 1000000007;

    public static void main(String[] args) throws FileNotFoundException {
        // PrintWriter out = new PrintWriter(new FileOutputStream(new File(
        // "output.txt")));
        PrintWriter out = new PrintWriter(System.out);
        Scanner in = new Scanner();
        int n = in.nextInt();
        int k = in.nextInt();
        long s = in.nextLong();
        int max = n - 1;
        long v = s / max;
        if (v * max < s) {
            v++;
        }
        if (v > k || k > s ||  n == 1) {
            out.println("NO");
        } else {
            out.println("YES");
            long step = s / k;
            if(step * k < s){
                step++;
            }
            long left = s - (step*(k - 1));

            long cur = 1;
            for(int i = 0; i < k - 1; i++){
                if(cur == 1){
                    cur += step;
                    out.print(cur + " ");
                }else{
                    cur -= step;
                    out.print(cur + " ");
                }
            }
            if(cur == 1){
                cur += left;
                out.print(cur);
            }else{
                cur -= left;
                out.print(cur);
            }
        }
        out.close();
    }

    public static int[] KMP(String val) {
        int i = 0;
        int j = -1;
        int[] result = new int[val.length() + 1];
        result[0] = -1;
        while (i < val.length()) {
            while (j >= 0 && val.charAt(j) != val.charAt(i)) {
                j = result[j];
            }
            j++;
            i++;
            result[i] = j;
        }
        return result;

    }

    public static boolean nextPer(int[] data) {
        int i = data.length - 1;
        while (i > 0 && data[i] < data[i - 1]) {
            i--;
        }
        if (i == 0) {
            return false;
        }
        int j = data.length - 1;
        while (data[j] < data[i - 1]) {
            j--;
        }
        int temp = data[i - 1];
        data[i - 1] = data[j];
        data[j] = temp;
        Arrays.sort(data, i, data.length);
        return true;
    }

    public static int digit(long n) {
        int result = 0;
        while (n > 0) {
            n /= 10;
            result++;
        }
        return result;
    }

    public static double dist(long a, long b, long x, long y) {
        double val = (b - a) * (b - a) + (x - y) * (x - y);
        val = Math.sqrt(val);
        double other = x * x + a * a;
        other = Math.sqrt(other);
        return val + other;

    }

    public static class Point implements Comparable<Point> {

        int x, y;

        public Point(int start, int end) {
            this.x = start;
            this.y = end;
        }

        @Override
        public int hashCode() {
            int hash = 5;
            hash = 47 * hash + this.x;
            hash = 47 * hash + this.y;
            return hash;
        }

        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final Point other = (Point) obj;
            if (this.x != other.x) {
                return false;
            }
            if (this.y != other.y) {
                return false;
            }
            return true;
        }

        @Override
        public int compareTo(Point o) {
            return Integer.compare(x, o.x);
        }
    }

    public static class FT {

        long[] data;

        FT(int n) {
            data = new long[n];
        }

        public void update(int index, long value) {
            while (index < data.length) {
                data[index] += value;
                index += (index & (-index));
            }
        }

        public long get(int index) {
            long result = 0;
            while (index > 0) {
                result += data[index];
                index -= (index & (-index));
            }
            return result;

        }
    }

    public static long gcd(long a, long b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }

    public static long pow(long a, long b, long MOD) {
        if (b == 0) {
            return 1;
        }
        if (b == 1) {
            return a;
        }
        long val = pow(a, b / 2, MOD);
        if (b % 2 == 0) {
            return val * val % MOD;
        } else {
            return val * (val * a % MOD) % MOD;

        }
    }

    static class Scanner {

        BufferedReader br;
        StringTokenizer st;

        public Scanner() throws FileNotFoundException {
            // System.setOut(new PrintStream(new BufferedOutputStream(System.out), true));
            br = new BufferedReader(new InputStreamReader(System.in));
            //  br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("input.txt"))));
        }

        public String next() {

            while (st == null || !st.hasMoreTokens()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (Exception e) {
                    throw new RuntimeException();
                }
            }
            return st.nextToken();
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }

        public String nextLine() {
            st = null;
            try {
                return br.readLine();
            } catch (Exception e) {
                throw new RuntimeException();
            }
        }

        public boolean endLine() {
            try {
                String next = br.readLine();
                while (next != null && next.trim().isEmpty()) {
                    next = br.readLine();
                }
                if (next == null) {
                    return true;
                }
                st = new StringTokenizer(next);
                return st.hasMoreTokens();
            } catch (Exception e) {
                throw new RuntimeException();
            }
        }
    }
}


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.SortedSet;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 * #
 * @author pttrung
 */
public class D_Round_501_Div3 {

    public static long MOD = 1000000007;

    public static void main(String[] args) throws FileNotFoundException {
        // PrintWriter out = new PrintWriter(new FileOutputStream(new File(
        // "output.txt")));
        PrintWriter out = new PrintWriter(System.out);
        Scanner in = new Scanner();
        int n = in.nextInt();
        int k = in.nextInt();
        long s = in.nextLong();
        int max = n - 1;
        long v = s / max;
        if (v * max < s) {
            v++;
        }
        if (v > k) {
            out.println("NO");
        } else {
            out.println("YES");
            long step = s / k;
            if(step * k < s){
                step++;
            }
            long left = s - (step*(k - 1));

            long cur = 1;
            for(int i = 0; i < k - 1; i++){
                if(cur == 1){
                    cur += step;
                    out.print(cur + " ");
                }else{
                    cur -= step;
                    out.print(cur + " ");
                }
            }
            if(cur == 1){
                cur += left;
                out.print(cur);
            }else{
                cur -= left;
                out.print(cur);
            }
        }
        out.close();
    }

    public static int[] KMP(String val) {
        int i = 0;
        int j = -1;
        int[] result = new int[val.length() + 1];
        result[0] = -1;
        while (i < val.length()) {
            while (j >= 0 && val.charAt(j) != val.charAt(i)) {
                j = result[j];
            }
            j++;
            i++;
            result[i] = j;
        }
        return result;

    }

    public static boolean nextPer(int[] data) {
        int i = data.length - 1;
        while (i > 0 && data[i] < data[i - 1]) {
            i--;
        }
        if (i == 0) {
            return false;
        }
        int j = data.length - 1;
        while (data[j] < data[i - 1]) {
            j--;
        }
        int temp = data[i - 1];
        data[i - 1] = data[j];
        data[j] = temp;
        Arrays.sort(data, i, data.length);
        return true;
    }

    public static int digit(long n) {
        int result = 0;
        while (n > 0) {
            n /= 10;
            result++;
        }
        return result;
    }

    public static double dist(long a, long b, long x, long y) {
        double val = (b - a) * (b - a) + (x - y) * (x - y);
        val = Math.sqrt(val);
        double other = x * x + a * a;
        other = Math.sqrt(other);
        return val + other;

    }

    public static class Point implements Comparable<Point> {

        int x, y;

        public Point(int start, int end) {
            this.x = start;
            this.y = end;
        }

        @Override
        public int hashCode() {
            int hash = 5;
            hash = 47 * hash + this.x;
            hash = 47 * hash + this.y;
            return hash;
        }

        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final Point other = (Point) obj;
            if (this.x != other.x) {
                return false;
            }
            if (this.y != other.y) {
                return false;
            }
            return true;
        }

        @Override
        public int compareTo(Point o) {
            return Integer.compare(x, o.x);
        }
    }

    public static class FT {

        long[] data;

        FT(int n) {
            data = new long[n];
        }

        public void update(int index, long value) {
            while (index < data.length) {
                data[index] += value;
                index += (index & (-index));
            }
        }

        public long get(int index) {
            long result = 0;
            while (index > 0) {
                result += data[index];
                index -= (index & (-index));
            }
            return result;

        }
    }

    public static long gcd(long a, long b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }

    public static long pow(long a, long b, long MOD) {
        if (b == 0) {
            return 1;
        }
        if (b == 1) {
            return a;
        }
        long val = pow(a, b / 2, MOD);
        if (b % 2 == 0) {
            return val * val % MOD;
        } else {
            return val * (val * a % MOD) % MOD;

        }
    }

    static class Scanner {

        BufferedReader br;
        StringTokenizer st;

        public Scanner() throws FileNotFoundException {
            // System.setOut(new PrintStream(new BufferedOutputStream(System.out), true));
            br = new BufferedReader(new InputStreamReader(System.in));
            //  br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("input.txt"))));
        }

        public String next() {

            while (st == null || !st.hasMoreTokens()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (Exception e) {
                    throw new RuntimeException();
                }
            }
            return st.nextToken();
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }

        public String nextLine() {
            st = null;
            try {
                return br.readLine();
            } catch (Exception e) {
                throw new RuntimeException();
            }
        }

        public boolean endLine() {
            try {
                String next = br.readLine();
                while (next != null && next.trim().isEmpty()) {
                    next = br.readLine();
                }
                if (next == null) {
                    return true;
                }
                st = new StringTokenizer(next);
                return st.hasMoreTokens();
            } catch (Exception e) {
                throw new RuntimeException();
            }
        }
    }
}